1. Date
clase y tiempo Unix
Desde el comienzo de Java, el lenguaje ha tenido una clase especial para trabajar con horas y fechas: Date
. Con el tiempo, aparecieron varias clases más para trabajar con fechas, pero los programadores continúan usando la Date
clase incluso hoy.
Esto se debe a que es muy simple y conveniente. Y como programador, definitivamente lo encontrará en cualquier proyecto real. Usarlo o no es tu elección, pero debes saberlo. Así que dale unos minutos de tu precioso tiempo.
¿ Qué hace que la Date
clase sea tan buena? Su sencillez.
La Date
clase almacena información de fecha y hora como la cantidad de milisegundos que han transcurrido desde el 1 de enero de 1970. Son muchos milisegundos, por lo que el long
tipo se usa para almacenarlos.
¿Por qué desde 1970 específicamente? Este es el llamado tiempo de Unix : es cómo el sistema operativo Unix, que es el abuelo de todos los sistemas operativos modernos, mantiene el tiempo.
Pero puede averiguar fácilmente cuánto tiempo ha pasado entre dos fechas: simplemente reste una fecha de la otra y obtendrá la diferencia de tiempo entre las fechas al milisegundo más cercano.
Estos son algunos ejemplos útiles de cómo trabajar con la Date
clase.
2. Obtener la fecha actual
Para obtener la hora y la fecha actuales, simplemente cree un Date
objeto. Cada nuevo objeto almacena la hora en que se creó. Parece muy simple:
Date current = new Date();
Después de ejecutar este comando, la current
variable almacenará una referencia al Date
objeto creado, que almacenará internamente la hora de su creación, la cantidad de milisegundos que han transcurrido desde el 1 de enero de 1970.
Visualización de la fecha actual en la pantalla
Para mostrar la fecha actual, simplemente: a) cree un nuevo Date
objeto, b) imprímalo en la pantalla usando el System.out.println()
método.
Ejemplo:
Código | Salida de consola |
---|---|
|
|
Esto es lo que significa la salida de la consola:
Texto | Interpretación |
---|---|
jueves _ | Jueves |
21 de febrero | 21 de febrero |
14:01:34 | horas : minutos : segundos |
EET | Zona horaria: Hora de Europa del Este |
2019 | Año |
3. Establecer una fecha específica
Descubrimos cómo obtener la hora actual, pero ¿cómo creamos un Date
objeto que almacena una fecha u hora diferente?
Una vez más, todo es simple aquí. Para establecer una fecha específica, debe escribir un código como este:
Date birthday = new Date(year, month, day);
Todo es simple y obvio, pero hay dos matices a tener en cuenta:
- El año debe contarse desde 1900.
- Los meses se numeran desde cero.
Este es otro legado del sistema operativo Unix: en Unix, los programadores indicaban el año con dos dígitos. En lugar de 1977, simplemente escribieron 77. Así que 77 es el año correcto si contamos desde 1900.
Por ejemplo, nací el 21 de marzo de 1989. Marzo es el tercer mes, entonces necesito escribir:
Código | Salida de consola |
---|---|
|
|
Los meses están numerados desde cero, pero los días no. Eso es un poco extraño, ¿verdad?
Creemos que los verdaderos programadores deberían haber prevalecido y numerado los días del mes desde cero también. Ay, estos conformistas 🙂
Establecer un tiempo específico
Establecer un tiempo específico también es bastante simple: para esto, debe escribir una declaración como esta:
Date birthday = new Date(year, month, day, hour, minutes, seconds);
Las horas, los minutos y los segundos están numerados desde cero: deja que el programador que llevas dentro respire aliviado.
Ejemplo:
Código | Salida de consola |
---|---|
|
|
Fijamos la hora 12:15 y la fecha 4 de junio de 2005 . Esto es un poco difícil de leer para un no programador, pero funciona como debería.
4. Trabajar con elementos de una fecha
Puede hacer más con un Date
objeto que simplemente mostrarlo. Tiene métodos que le permiten obtener elementos individuales de la fecha almacenada internamente:
Método | Descripción |
---|---|
|
Devuelve el año de la fecha relativo a 1900. |
|
Devuelve el mes de la fecha (los meses se numeran desde cero) |
|
Devuelve el día del mes. |
|
Devuelve el día de la semana. |
|
Devuelve las horas |
|
Devuelve los minutos |
|
Devuelve los segundos |
Ejemplo:
Código | Salida de consola | Nota |
---|---|---|
|
|
2005 junio día del mes sábado |
Por cierto, un Date
objeto no solo te permite obtener elementos individuales de una fecha, sino también cambiarlos:
Método | Descripción |
---|---|
void setYear(int year) |
Cambia el año de la fecha. El año se indica relativo a 1900. |
void setMonth(int month) |
Cambia el mes de la fecha (los meses se numeran desde cero) |
void setDate(int date) |
Cambia el día del mes |
void setHours(int hours) |
Cambios de horario |
void setMinutes(int minutes) |
Cambia minutos |
void setSeconds(int seconds) |
Cambia segundos |
5. Milisegundos
Como dijimos anteriormente, el Date
objeto almacena la cantidad de milisegundos que han transcurrido desde el 1 de enero de 1970.
Si necesitamos ese número, podemos obtenerlo del Date
objeto:
long time = date.getTime();
El getTime()
método devuelve el número de milisegundos almacenados dentro del Date
objeto.
No solo puede obtener el número de milisegundos, sino que también puede cambiar ese número en un objeto existente:
Date date = new Date();
date.setTime(1117876500000L);
Por cierto, puedes escribir esto de manera aún más concisa pasando el tiempo al Date
objeto justo cuando se crea:
Date date = new Date(1117876500000L);
6. Comparar fechas
Si quieres comparar dos fechas y saber cuál fue primero, tienes tres opciones
La primera forma es simplemente comparar la cantidad de milisegundos que almacena cada uno:
if (date1.getTime() < date2.getTime())
La segunda forma es usar el before()
método de un Date
objeto:
if (date1.before(date2))
Se lee así: si date1
viene antes date2
, entonces...
La tercera forma es usar el after()
método de un Date
objeto:
if (date2.after(date1))
Se lee así: si date2
es después de date1
, entonces...
7. DateFormat
clase
Recuerde, cuando mostramos la fecha en la pantalla, vimos algo como esto: Thu Feb 21 14:01:34 EET 2019
. Todo parece correcto, pero el formato es más como se mostraría una fecha para los programadores que para los humanos normales. Queremos mostrar la fecha más claramente para los usuarios. Algo Tuesday, February 21
como
Y sin el año. O con un año, si es necesario. En general, queremos poder mostrar la fecha de diferentes maneras.
Hay una clase especial para esto: SimpleDateFormat
.
Ejemplo:
Código |
---|
|
Salida de consola |
|
Mira lo que muestra el programa: Jun-04-2005
. Eso no es en absoluto lo que solía ser.
La diferencia es que no mostramos el Date
objeto en sí, sino una cadena especial obtenida al llamar al format()
método en un SimpleDateFormat
objeto. Pero ese ni siquiera es el punto principal aquí.
Cuando SimpleDateFormat
se creó el objeto, pasamos la cadena "MMM-dd-YYYY"
como parámetro. Es esta cadena la que transmite el formato de fecha que finalmente vimos en la salida de la consola.
- MMM indica que se muestre el nombre del mes, abreviado con tres letras
- dd indica que se muestre el día del mes
- YYYY indica que se muestre el año usando cuatro dígitos
Si queremos generar el mes como números, entonces en lugar de MMM
, debemos escribir MM
, lo que produce el patrón "MM-dd-YYYY"
. La salida de la pantalla será06-04-2005
Discutiremos esta clase con más detalle más adelante.
8. Date.parse
método
La Date
clase puede hacer otra cosa interesante y útil: puede obtener una fecha de una cadena. O, como dicen los programadores, puede analizar una cadena.
Tiene el parse()
método especial para esto. El análisis se ve así:
Date date = new Date();
date.setTime( Date.parse("Jul 06 12:15:00 2019") );
Por cierto, este código se puede escribir de forma más compacta:
Date date = new Date("Jul 06 12:15:00 2019");
Consideraremos el análisis de cadenas con más detalle en otras lecciones.
GO TO FULL VERSION