En las primeras versiones de Java para representar fechas y horas se utilizaba la clase Date del paquete java.util. Aunque todavía se puede utilizar, y hay muchos proyectos corriendo que la usan, actualmente está considerada obsoleta.
La clase Date fue mejorada por el conjunto de clases derivadas de la clase abstracta Calendar, también pertenecientes al paquete java.util.
Con la versión 8 de Java apareció el paquete java.time con las siguientes clases:
- LocalDate: para representar una fecha.
- LocalDateTime: para representar un instante en el tiempo (fecha y hora).
- LocalTime: para representar una hora.
En esta ocasión trabajaremos con la clase LocalDateTime:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import java.time.LocalDateTime; public class Principal { public static void main(String[] args) { // Obtenemos la fecha actual (fecha del sistema). LocalDateTime fecha = LocalDateTime.now(); System.out.println("Fecha del sistema: " + fecha); System.out.println("Mes: " + fecha.getMonth()); System.out.println("Dia: " + fecha.getDayOfMonth()); System.out.println("Año: " + fecha.getYear()); System.out.println("Dia del año: " + fecha.getDayOfYear()); // Objeto que representa otra fecha cualquiera. LocalDateTime otraFecha = LocalDateTime.of(1967, 2, 26, 19, 30); System.out.println("Otra fecha: " + otraFecha); } } |
llamamos a los métodos estáticos now() y of().
El método now() nos devuelve un nuevo objeto LocalDateTime, que representa la fecha actual (fecha del sistema).
|
1 |
LocalDateTime obj = LocalDateTime.now(); |
El método of() nos devuelve un nuevo objeto LocalDateTime, que representa la fecha indicada en los argumentos. El método of() se utiliza con el siguiente formato:
|
1 |
LocalDateTime obj = LocalDateTime.of(año, mes, día, horas, minutos, segundo); |
El último argumento (los segundos) no es obligatorio. Observa que en el ejemplo no se pasó a la función of().
Métodos más comunes de la clase LocalDate y LocalDateTime
- String getMonth(): devuelve el mes en texto en inglés.
- int getMonthValue(): devuelve el mes en número (1 a 12).
- int getDayOfMonth(): devuelve el día del mes.
- int getYear(): devuelve el año.
- int getDayOfYear(): devuelve el día del año (1 a 365).
- LocalDateTime minusDays(int dias): devuelve un nuevo objeto LocalDateTime como resultado de restar el número de días especificado.
- LocalDateTime plusDays(int dias): devuelve un nuevo objeto LocalDateTime como resultado de sumar el número de días especificado.
- String format(DateTimeFormatter formatter): devuelve una cadena resultado de formatear la salida de la fecha/hora según el formato especificado en el objeto DateTimeFormatter pasado como argumento.
|
1 2 3 4 5 |
System.out.println("Fecha de hoy " + LocalDateTime.now().getDayOfMonth() + "/" + LocalDateTime.now().getMonthValue() + "/" + LocalDateTime.now().getYear()); //La siguiente sentencia muestra en pantalla la fecha actual en un texto con el siguiente formato: "Fecha de hoy 5/3/2018". |
|
1 2 3 4 5 6 |
LocalDateTime fecha = LocalDateTime.now(); fecha = fecha.minusDays(10); // Resta 10 días System.out.println(fecha); fecha = fecha.plusDays(20); // Suma 20 días System.out.println(fecha); //Este ejemplo resta 10 días a la fecha actual y después le suma 20 días. |
Aplicando formato
Las clases LocalDate, LocalTime y LocalDateTime poseen el método format, que devuelve un texto a partir de la fecha/hora aplicando formato. El método format recibe como argumento un objeto DateTimeFormatter que puede obtenerse invocando al método ofPattern especificando un patrón de formato.
|
1 2 3 4 5 6 7 8 9 10 |
import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; public class Principal { public static void main(String[] args) { LocalDateTime hoy = LocalDateTime.now(); String texto = hoy.format(DateTimeFormatter.ofPattern("EEEE dd 'de' MMMM 'de' YYYY HH:MM" )); System.out.println(texto); } } |
Aplicar formato a los números y a las fechas
La clase DecimalFormat
Dentro del paquete java.text se encuentran un conjunto de clases que permiten formatear la salida de datos numéricos, fechas y otros. En esta ocasión utilizaremos la clase DecimalFormat.
La clase DecimalFormat se utiliza en los casos en los que queremos convertir un valor numérico a un texto con formato cuando queremos presentar dicho número al usuario con un formato específico. Los objetos de tipo DecimalFormat se construyen de la siguiente manera:
|
1 |
DecimalFormat obj = new DecimalFormat(String formato); |
formato establece el tipo de conversión a texto que conseguiremos y se utilizan, entre otros, los siguientes caracteres:
- 0: indica una cifra que siempre es representada, aunque no sea representativa (un cero a la izquierda de la parte entera o un cero a la derecha de la parte decimal).
- #: representa una cifra que será representada si es significativa, no incluye ceros a la izquierda de la parte entera ni ceros a la derecha de la parte decimal.
- . : representa el separador decimal.
- , : representa el separador de miles.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import java.text.DecimalFormat; public class Principal { public static void main(String[] args) { double num1=58444.837324; double num2=0.4; DecimalFormat df1 = new DecimalFormat("###,##0.00"); DecimalFormat df2 = new DecimalFormat("000,000.000"); // Usando primer formato String texto1 = df1.format(num1); String texto2 = df1.format(num2); System.out.println(texto1); // Muestra 58.444,84 System.out.println(texto2); // Muestra 0,40 // Usando segundo formato texto1 = df2.format(num1); texto2 = df2.format(num2); System.out.println(texto1); // Muestra 058.444,837 System.out.println(texto2); // Muestra 000.000,400 } } |