Cómo obtener la fecha y hora actual en Java

C

Introducción

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.

La 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:

DateTimeFormatter 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.

Con 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.

Si desea leer sobre la conversión de una cadena en una fecha en Java, ¡lo tenemos cubierto!

About the author

Ramiro de la Vega

Bienvenido a Pharos.sh

Soy Ramiro de la Vega, Estadounidense con raíces Españolas. Empecé a programar hace casi 20 años cuando era muy jovencito.

Espero que en mi web encuentres la inspiración y ayuda que necesitas para adentrarte en el fantástico mundo de la programación y conseguir tus objetivos por difíciles que sean.

Add comment

Sobre mi

Últimos Post

Etiquetas

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con tus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, aceptas el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad