Cómo obtener la fecha y hora actual en Java

    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!

    Etiquetas:

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *