Cómo obtener la fecha y hora actuales

Resuelto mrblah asked hace 14 años • 10 respuestas

¿Cómo obtengo la fecha y hora actuales en Java?

Estoy buscando algo que sea equivalente a DateTime.NowC#.

mrblah avatar Jan 06 '10 07:01 mrblah
Aceptado

Simplemente construya un nuevo Dateobjeto sin ningún argumento; esto asignará la fecha y hora actuales al nuevo objeto.

import java.util.Date;

Date d = new Date();

En palabras de los Javadocs para el constructor de argumento cero :

Asigna un objeto Fecha y lo inicializa para que represente la hora en la que se asignó , medida al milisegundo más cercano.

Asegúrate de estar usando java.util.Datey no java.sql.Date: este último no tiene un constructor de argumento cero y tiene una semántica algo diferente que es tema de una conversación completamente diferente. :)

delfuego avatar Jan 06 '2010 00:01 delfuego

Muchos consideran que las clases Java Date y Calendar están mal diseñadas. Deberías echarle un vistazo a Joda Time , una biblioteca comúnmente utilizada en lugar de las bibliotecas de fechas integradas de Java.

El equivalente de DateTime.Nowen Joda Time es:

DateTime dt = new DateTime();

Actualizar

Como se indica en los comentarios, las últimas versiones de Joda Time tienen un DateTime.now()método, por lo que:

DateTime dt = DateTime.now();
cdmckay avatar Jan 06 '2010 02:01 cdmckay

tl; dr

Instant.now()

java.tiempo

La clase java.util.Date ha quedado obsoleta por el nuevo paquete java.time ( Tutorial ) en Java 8 y versiones posteriores. Las antiguas clases java.util.Date/.Calendar son notoriamente problemáticas, confusas y defectuosas. Evítales.

ZonedDateTime

Obtenga el momento actual en java.time.

ZonedDateTime now = ZonedDateTime.now();

A ZonedDateTimeencapsula:

  • Fecha.
  • Hora del día, con una resolución de una fracción de segundo a un nanosegundo .
  • Zona horaria.

Si no se especifica ninguna zona horaria, la zona horaria predeterminada actual de su JVM se asigna de forma silenciosa. Es mejor especificar la zona horaria deseada/esperada que confiar implícitamente en la predeterminada.

ZoneId z = ZoneId.of( "Pacific/Auckland" );
ZonedDateTime zdt = ZonedDateTime.now( z );

UTC

En general, es mejor acostumbrarse a realizar el trabajo de back-end (lógica empresarial, base de datos, almacenamiento, intercambio de datos), todo en la zona horaria UTC . El código anterior se basa implícitamente en la zona horaria predeterminada actual de la JVM.

La Instantclase representa un momento en la línea de tiempo en UTC con una resolución de nanosegundos.

Instant instant = Instant.now();

La Instantclase es una clase básica de componentes básicos en java.time y puede usarse con frecuencia en su código.

Cuando necesites más flexibilidad en el formato, transfórmalo a un archivo OffsetDateTime. Especifique un ZoneOffsetobjeto. Para UTC utilice la práctica constante para UTC .

OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC );

Zona horaria

Puede ajustarse fácilmente a otra zona horaria para la presentación al usuario. Utilice un nombre de zona horaria adecuado , nunca códigos de 3 o 4 letras como ESTo IST.

ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime nowMontreal = instant.atZone( z );

Genere una representación de cadena de ese valor de fecha y hora, localizado.

String output = DateTimeFormatter
    .ofLocalizedDate( FormatStyle.FULL )
    .withLocale( Locale.CANADA_FRENCH )
    .format ( nowMontreal );

Instant

O, para permanecer en UTC, utilice Instant. Un Instantobjeto representa un momento en la línea de tiempo, con una resolución de nanosegundos, siempre en UTC. Esto proporciona la base para una fecha y hora zonificada, junto con una asignación de zona horaria. Puedes pensarlo conceptualmente de esta manera:

ZonedDateTime= Instant+ZoneId

Puedes extraer un Instantde un ZonedDateTime.

Instant instantNow = zdt.toInstant();

Puedes comenzar con un Instantáneo. No es necesario especificar una zona horaria aquí, ya Instantque siempre ocurre en UTC.

Instant now = Instant.now();
Basil Bourque avatar May 11 '2015 20:05 Basil Bourque