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 *