Cómo obtener la fecha y hora actuales
¿Cómo obtengo la fecha y hora actuales en Java?
Estoy buscando algo que sea equivalente a DateTime.Now
C#.
Simplemente construya un nuevo Date
objeto 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.Date
y 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. :)
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.Now
en 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();
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 ZonedDateTime
encapsula:
- 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 Instant
clase representa un momento en la línea de tiempo en UTC con una resolución de nanosegundos.
Instant instant = Instant.now();
La Instant
clase 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 ZoneOffset
objeto. 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 EST
o 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 Instant
objeto 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 Instant
de un ZonedDateTime
.
Instant instantNow = zdt.toInstant();
Puedes comenzar con un Instantáneo. No es necesario especificar una zona horaria aquí, ya Instant
que siempre ocurre en UTC.
Instant now = Instant.now();