Introducción
Contenido
En este artículo, exploraremos muchas formas de obtener la fecha y hora actuales en Java. La mayoría de las aplicaciones necesitan eventos de marca de tiempo o mostrar fecha / hora, entre muchos otros casos de uso:
- Cuando publicamos blogs en un sitio web, la fecha de publicación se anota en una base de datos y se muestra al lector.
- Cuando hacemos una acción, nos gustaría saber el momento en que estará disponible para poder realizar un seguimiento de ella.
- Cuando compramos algo en línea o hacemos una transacción, nuestros bancos nos ofrecen la lista de transacciones con las marcas de tiempo exactas para que las revisemos.
En pocas palabras, obtener la fecha y hora actual en Java es muy importante y tiene una gran cantidad de usos, y afortunadamente, es realmente fácil de obtener para cualquier tipo de uso.
System.currentTimeMillis ()
Si desea obtener un solo valor numérico de milisegundos transcurridos desde el Época UNIX, es tan fácil como:
System.currentTimeMillis();
Imprimir este valor resultaría en algo similar a esto:
1580897313933
Al convertir este número de nuevo a una fecha legible por humanos, representa:
Wednesday, 5 February 2020 10:08:33.933
Y para hacer esto en Java, solo necesitamos un par de líneas de código:
SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd 'at' HH:mm:ss z");
Date date = new Date(System.currentTimeMillis());
System.out.println(formatter.format(date));
Ejecutar este fragmento de código produciría:
2020-02-05 at 10:11:33 UTC
Nota: Tenga en cuenta que este método devuelve el valor actual dependiendo de la hora de su sistema.
java.util.Date
En Java, obtener la fecha actual es tan simple como instanciar el Date
objeto del paquete Java java.util
:
Date date = new Date(); // This object contains the current date value
Podemos formatear esta fecha fácilmente:
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
System.out.println(formatter.format(date));
Y ejecutar este fragmento de código produciría:
05-02-2020 10:12:46
La API de calendario
Entre la miríada de clases de Java se encuentra la Calendar
class, que se utiliza para convertir fechas y horas entre instantes específicos y campos de calendario.
Obtener la fecha y hora actual es realmente fácil usando un calendario:
Calendar calendar = Calendar.getInstance(); // Returns instance with current date and time set
Nuevamente, podemos formatear esto fácilmente:
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
System.out.println(formatter.format(calendar.getTime()));
los getTime()
el método devuelve un Date
objeto. Ya que SimpleDateFormat
solo funciona con Date
objetos, estamos llamando al getTime()
método del Calendar
class para formatearlo.
Ejecutar este fragmento de código produciría:
25-11-2018 00:43:39
La API de fecha / hora
Java 8 nos presentó una API completamente nueva, que se incluyó en la compilación para reemplazar java.util.Date
y java.util.Calendar
.
Sigue siendo útil saber cómo obtener la fecha y la hora actuales utilizando las dos clases anteriores, ya que no todas las aplicaciones han migrado todavía a Java 8.
Te puede interesar:Guía para la interfaz del futuro en JavaLa API de fecha / hora proporciona varias clases en las que podemos confiar para hacer el trabajo:
LocalDate
LocalDate
representa solo una fecha, sin tiempo. Esto significa que solo podemos obtener la fecha actual, pero sin la hora del día:
LocalDate date = LocalDate.now(); // Gets the current date
Esta vez, en lugar de inicializar un nuevo objeto, llamamos al método estático now()
que devuelve la fecha actual según el reloj del sistema, con la zona horaria predeterminada.
Podemos formatear este objeto:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy");
System.out.println(date.format(formatter));
Ejecutar este fragmento de código produciría:
05-02-2020
También puede pasar un ZoneId
al método para recuperar la fecha según la zona horaria especificada, en lugar de la predeterminada:
LocalDate date = LocalDate.now(ZoneId.of("Europe/Paris")); // Gets current date in Paris
Puede obtener una lista de todos los ID de zona horaria disponibles a través de:
System.out.println(ZoneId.getAvailableZoneIds());
Hora local
LocalTime
es lo contrario de LocalDate
en que representa solo una hora, sin la fecha. Esto significa que solo podemos obtener la hora actual del día, sin la fecha real:
LocalTime time = LocalTime.now(); // Gets the current time
Podemos formatear fácilmente este objeto:
Te puede interesar:Codificación y decodificación de cadenas Base64 en JavaDateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");
System.out.println(time.format(formatter));
Ejecutar este fragmento de código produciría:
00:55:58
LocalDateTime
Y finalmente, un LocalDateTime
, la clase de fecha / hora más utilizada en Java, representa la combinación de las dos anteriores, manteniendo el valor de la fecha y la hora:
LocalDateTime dateTime = LocalDateTime.now(); // Gets the current date and time
Podemos formatear fácilmente este objeto:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss");
System.out.println(dateTime.format(formatter));
Ejecutar este fragmento de código produciría:
05-02-2020 10:31:42
ZonedDateTime
Junto a las clases anteriores, el ZonedDateTime
class también ofrece esta funcionalidad:
ZonedDateTime dateTime = ZonedDateTime.now(); // Gets the current date and time, with your default time-zone
Podemos formatear fácilmente este objeto:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss");
System.out.println(dateTime.format(formatter));
Ejecutar este fragmento de código produciría:
05-02-2020 10:32:26
Reloj
Otra clase que se nos presentó en la API de fecha / hora de Java 8 es la Clock
clase. Proporciona acceso a la corriente Instant
, LocalDate
, LocalTime
y LocalDateTime
utilizando una zona horaria.
Dicho esto, usando un Clock
, prácticamente crea una instancia de todos ellos y puede acceder a los que le interesan.
// Clock with the system's default timezone
Clock clock = Clock.systemDefaultZone();
// Clock with the UTC timezone
Clock clock = Clock.systemUTC();
A través de esta instancia de objeto, podemos instanciar muchas de las clases mencionadas anteriormente:
// Each of these obtain the current instance of that class from the clock
LocalDateTime localDateTime = LocalDateTime.now(clock);
LocalTime localTime = LocalTime.now(clock);
LocalDate localDate = LocalDate.now(clock);
Instant instant = Instant.now(clock);
ZonedDateTime zonedDateTime.now(clock);
Nota: Es válido preguntar por qué usaríamos un Clock
en lugar de simplemente dejar el now()
método vacío. UN Clock
es opcional y el now()
El método generalmente usa el reloj del sistema para determinar los valores. Sin embargo, a través de un reloj puede tener algo más que el reloj de su sistema si así lo desea. En nuestro ejemplo, sin embargo, no hace ninguna diferencia.
Utilizando el clock
, podemos extraer un Instant
:
Instant instant = clock.instant();
System.out.println(instant);
Ejecutar este código produciría:
2020-04-16T17:05:43.867063Z
Puedes hacer un zonificado Clock
pasando un ZoneId
a para Clock.system()
:
Clock clock = Clock.system(ZoneId.of("Europe/Paris"));
Imprimir el valor del Instant
perteneciendo a clock
rendiría:
2020-04-16T17:08:16.139183Z
Y finalmente, usando un Clock
, mediante el millis()
método, puede acceder al valor de milisegundos del reloj, que es el mismo que System.currentTimeMillis()
:
System.out.println(clock.millis());
System.out.println(System.currentTimeMillis());
Ambos se imprimirán:
1587057153329
1587057153329
Joda-Time
Joda-Time es una herramienta que se desarrolló originalmente para contrarrestar los problemas con las antiguas clases de fecha y hora de Java.
Te puede interesar:Guía para la tarea de Spring Cloud: microservicios de Spring Boot de corta duraciónCon el lanzamiento de Java 8, estos problemas se han abordado y Joda-Time ha cumplido su propósito, sin ser utilizado hoy con mucha frecuencia.
Nuevamente, si su proyecto no está actualizado a Java 8, Joda-Time sigue siendo una gran herramienta para usar como alternativa.
Para usarlo en su proyecto, es más fácil simplemente agregar un Maven dependencia:
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>${version}</version>
</dependency>
Trabajar con Joda-Time es muy similar a trabajar con la API de fecha / hora de Java:
DateTime dateTime = new DateTime(); // Initializes with the current date and time
Nota: Al inicializar Joda-Time’s DateTime
clase por primera vez, hay problemas de rendimiento conocidos que se producen debido a la carga de descriptores de cronología.
Es fácil formatear este objeto:
DateTimeFormatter formatter = DateTimeFormatter.forPattern("dd-MM-yyyy HH:mm:ss");
System.out.println(fmt.print(dateTime));
Ejecutar este fragmento de código produciría:
05-02-2020 10:33:05
Conclusión
Hay muchos casos en los que alguien necesitaría obtener la fecha y / o la hora actual en Java, y hemos cubierto todos los enfoques que existen a partir de ahora para hacerlo, incluidas las clases más antiguas: java.util.Date
y java.util.Calendar
así como el más nuevo java.time
clases que llegaron con la nueva API de fecha / hora.
Además, hemos cubierto Joda-Time y su enfoque para obtener la fecha y hora actual.
Te puede interesar:Jump Search en JavaSi desea leer sobre la conversión de una cadena en una fecha en Java, ¡lo tenemos cubierto!