1. Presentamos la API de fecha y hora
A los creadores de Java no les gustó la situación con las clases Fecha y Calendario. Fueron buenos en su día, pero los tiempos cambian. Y se hizo necesario algo simple, poderoso y confiable. Y con el lanzamiento de Java 8 (15 años después de Calendar
su aparición), se introdujo la API de fecha y hora de Java . Es un conjunto de clases que debería ser capaz de resolver todas las tareas posibles relacionadas con el tiempo.
Había tantas clases que se dividieron en varios paquetes:
El java.time
paquete es el paquete base para Java Date Time API: contiene clases como LocalDate
, LocalTime
, LocalDateTime
, Instant
, Period
y Duration
. Todos los objetos de estas clases son immutable
, lo que significa que no se pueden cambiar después de la creación.
El java.time.format
paquete contiene clases para dar formato a la hora, es decir, convertir horas (y fechas) en cadenas y viceversa. Por ejemplo, contiene la DateTimeFormatter
clase versátil, que reemplaza a la SimpleDateFormat
clase.
El java.time.zone
paquete contiene clases para trabajar con zonas horarias. Contiene clases como TimeZone
y ZonedDateTime
. Si está escribiendo código de servidor para clientes ubicados en diferentes partes del mundo, realmente necesitará estas clases.
2. LocalDate
clase
La primera y más útil clase de la API de fecha y hora que veremos es la LocalDate
clase. Como probablemente pueda adivinar por su nombre, esta clase está diseñada para trabajar con fechas.
Los objetos de esta clase no cambian una vez creados, es decir, la LocalDate
clase es inmutable. Pero esta propiedad agrega simplicidad y confiabilidad a la clase. Especialmente si varios hilos (hilos de ejecución) están interactuando con dicho objeto al mismo tiempo.
Para crear un nuevo LocalDate
objeto, debe usar uno de los métodos estáticos. Aquí hay una lista de los principales.
Obtener la fecha actual
Para obtener la fecha actual, debe usar el now()
método estático. Esto es mucho más fácil de lo que parece:
LocalDate today = LocalDate.now();
Where today
es una LocalDate
variable y LocalDate.now()
es una llamada al now()
método estático de la LocalDate
clase.
Ejemplo:
Código | Salida de consola |
---|---|
|
|
Obtener una fecha en una zona horaria específica
La LocalDate
clase también tiene una variación del now(ZoneId)
método que le permite obtener la fecha actual en una zona horaria específica.
Para hacer esto, necesitamos otra clase: la ZoneId
clase (java.time.ZoneId). Tiene un of()
método que devuelve un ZoneId
objeto dado el nombre de la zona horaria.
Para determinar la fecha actual en Shanghai, debe escribir el siguiente código:
Código | Salida de consola |
---|---|
|
|
Puede encontrar una lista de los nombres de todas las zonas horarias en Internet.
3. Obtener una fecha específica
Para obtener un LocalDate
objeto que represente una fecha específica, debe usar el of()
método estático. Todo aquí también es muy simple y claro:
LocalDate date = LocalDate.of(2019, Month.FEBRUARY, 22);
Where date
es una LocalDate
variable y es una llamada al método estático de la clase.LocalDate.of()
of()
LocalDate
Aquí vemos la FEBRUARY
constante de la Month
clase (java.time.Month) que se utiliza para especificar febrero como mes.
También puedes especificar el mes a la antigua, usando un número:
LocalDate date = LocalDate.of(2019, 2, 22);
¿Dos? en lugar de febrero? ¿Significa eso que los meses se están contando una vez más a partir del uno?
Sí, casi 20 años después de la creación de Java, los meses finalmente han dejado de contarse desde cero.
Ejemplo:
Código | Salida de consola |
---|---|
|
|
Obtener una fecha por el índice del día.
Hay otra forma interesante de crear una fecha: usando el ofYearDay
método, puede obtener una fecha basada solo en el número del año y el índice del día en el año. Aquí está la apariencia general:
LocalDate date = LocalDate.ofYearDay(year, day);
Donde year
es el número del año y day
es el índice del día en el año.
Ejemplo:
Código | Salida de consola |
---|---|
|
|
El día 100 de 2019 es el 10 de abril.
Obtener una fecha de Unix
¿Recuerdas que Date
los objetos siempre almacenaron el tiempo como el número de milisegundos desde el 1 de enero de 1970? Para asegurarse de que los programadores no se pierdan los viejos tiempos, la LocalDate
clase obtuvo un ofEpochDay()
método que devuelve la fecha calculada a partir del 1 de enero de 1970. Aquí está la apariencia general:
LocalDate date = LocalDate.ofEpochDay(day);
Donde day
es el número de días que han transcurrido desde el 1 de enero de 1970.
Ejemplo:
Código | Salida de consola |
---|---|
|
|
4. Obtener elementos de una fecha
Es imposible cambiar LocalDate
objetos, pero puede obtener elementos individuales de la fecha almacenada. LocalDate
Los objetos tienen varios métodos para esto:
Método | Descripción |
---|---|
|
Devuelve el año de una fecha específica |
|
Devuelve el mes de la fecha: una de varias constantesJANUARY, FEBRUARY, ...; |
|
Devuelve el índice del mes de la fecha. Enero == 1. |
|
Devuelve el índice del día del mes. |
|
Devuelve el índice del día desde el comienzo del año. |
|
Devuelve el día de la semana: una de varias constantesMONDAY, TUESDAY, ...; |
|
Devuelve la era: ya sea BCE (antes de la era actual) y CE (era actual) |
Ejemplo:
Código | Salida de consola |
---|---|
|
|
5. Cambiar la fecha en un LocalDate
objeto
La LocalDate
clase contiene varios métodos que le permiten trabajar con fechas. La implementación de estos métodos es análoga a los métodos de la String
clase: no cambian el LocalDate
objeto existente, sino que devuelven uno nuevo con los datos deseados.
Estos son los métodos de la LocalDate
clase:
Método | Descripción |
---|---|
|
Agrega un número específico de días a la fecha |
|
Agrega semanas a la fecha |
|
Agrega meses a la fecha |
|
Agrega años a la fecha |
|
Resta días de la fecha |
|
Resta semanas de la fecha |
|
Resta meses desde la fecha |
|
Resta años a partir de la fecha |
Ejemplo:
Código | Salida de consola |
---|---|
|
|
Los birthday object
métodos a los que llamamos no cambian. En cambio, sus métodos devuelven nuevos objetos que contienen los datos deseados.
GO TO FULL VERSION