Esta pregunta es anterior a esta pregunta anteriormente marcada como duplicada. Así que invertí la designación, reabrí esta Pregunta y marqué la más nueva como duplicada.
Basil Bourque
Respuestas:
414
Simplemente construya un nuevo Dateobjeto sin ningún argumento; esto asignará la fecha y hora actuales al nuevo objeto.
Asigna un objeto Date y lo inicializa para que represente la hora a la que fue asignado , medido al milisegundo más cercano.
Asegúrese de estar usando java.util.Datey no java.sql.Date: este último no tiene un constructor de cero argumentos y tiene una semántica algo diferente que es el tema de una conversación completamente diferente. :)
También tenga en cuenta que GregorianCalendar y muchos objetos similares funcionan de la misma manera. Entonces, sea cual sea el tipo de objeto de fecha / calendario con el que esté trabajando, el constructor de argumento cero generalmente inicializa el objeto a la fecha / hora actual.
Peter Di Cecco
From Date doc: a partir de JDK 1.1, la clase Calendar debe usarse para convertir entre fechas y campos de tiempo y la clase DateFormat debe usarse para formatear y analizar cadenas de fechas.
Muchos consideran que las clases Java Date y Calendar están mal diseñadas. Debería echar un vistazo a Joda Time , una biblioteca comúnmente utilizada en lugar de las bibliotecas de fechas incorporadas de Java.
El equivalente de DateTime.Nowen Joda Time es:
DateTime dt =newDateTime();
Actualizar
Como se señaló en los comentarios, las últimas versiones de Joda Time tienen un DateTime.now()método, por lo que:
Tenga en cuenta que esta respuesta se publicó en 2010. Java 8 ha absorbido muchas de las mejores características de Joda Time. Consulte la documentación oficial y muchos otros artículos en línea para obtener más información.
DavidS
36
tl; dr
Instant.now()
java.time
La clase java.util.Date ha quedado anticuada 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 e imperfectas. Evítales.
Hora del día, con una fracción de resolución de segundo a nanosegundo .
Zona horaria.
Si no se especifica una zona horaria, la zona horaria predeterminada actual de su JVM se asigna silenciosamente. Es mejor especificar su zona horaria deseada / esperada que confiar implícitamente en el valor predeterminado.
ZoneId z =ZoneId.of("Pacific/Auckland");ZonedDateTime zdt =ZonedDateTime.now( z );
UTC
En general, es mejor acostumbrarse a hacer su trabajo de back-end (lógica de negocios, 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 bloques de construcción en java.time y se puede usar a menudo en su código.
Se ajusta fácilmente a otra zona horaria para presentarla al usuario. Use un nombre de zona horaria adecuado , nunca los códigos de 3-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.
O, para permanecer en UTC, use Instant. Un Instantobjeto representa un momento en la línea de tiempo, a una resolución de nanosegundos, siempre en UTC. Esto proporciona el bloque de construcción para una fecha y hora zonificada, junto con una asignación de zona horaria. Puedes pensarlo conceptualmente de esta manera:
Java siempre ha tenido un soporte inadecuado para los casos de uso de fecha y hora. Por ejemplo, las clases existentes (como java.util.Datey SimpleDateFormatter) no son seguras para subprocesos, lo que puede provocar problemas de concurrencia. También hay ciertos defectos en la API. Por ejemplo, los años que java.util.Datecomienzan en 1900, los meses comienzan en 1 y los días comienzan en 0, lo que no es muy intuitivo. Estos problemas llevaron a la popularidad de las bibliotecas de fecha y hora de terceros, como Joda-Time. Para abordar una nueva fecha y hora, la API está diseñada para Java SE 8.
El método now()devuelve la fecha y hora actual utilizando el reloj del sistema y la zona horaria predeterminada, no nulo . Obtiene la fecha y hora actual del reloj del sistema en la zona horaria predeterminada. Esto consultará el reloj del sistema en la zona horaria predeterminada para obtener la fecha y hora actual. El uso de este método impedirá la posibilidad de usar un reloj alternativo para las pruebas porque el reloj está codificado.
Respuestas:
Simplemente construya un nuevo
Date
objeto sin ningún argumento; esto asignará la fecha y hora actuales al nuevo objeto.En palabras de los Javadocs para el constructor de argumento cero :
Asegúrese de estar usando
java.util.Date
y nojava.sql.Date
: este último no tiene un constructor de cero argumentos y tiene una semántica algo diferente que es el tema de una conversación completamente diferente. :)fuente
Muchos consideran que las clases Java Date y Calendar están mal diseñadas. Debería echar un vistazo a Joda Time , una biblioteca comúnmente utilizada en lugar de las bibliotecas de fechas incorporadas de Java.
El equivalente de
DateTime.Now
en Joda Time es:Actualizar
Como se señaló en los comentarios, las últimas versiones de Joda Time tienen un
DateTime.now()
método, por lo que:fuente
tl; dr
java.time
La clase java.util.Date ha quedado anticuada 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 e imperfectas. Evítales.
ZonedDateTime
Obtenga el momento actual en java.time.
A
ZonedDateTime
encapsula:Si no se especifica una zona horaria, la zona horaria predeterminada actual de su JVM se asigna silenciosamente. Es mejor especificar su zona horaria deseada / esperada que confiar implícitamente en el valor predeterminado.
UTC
En general, es mejor acostumbrarse a hacer su trabajo de back-end (lógica de negocios, 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.La
Instant
clase es una clase básica de bloques de construcción en java.time y se puede usar a menudo en su código.Cuando necesite más flexibilidad en el formato, transfórmese en un
OffsetDateTime
. Especifica unZoneOffset
objeto. Para UTC, use la constante útil para UTC .Zona horaria
Se ajusta fácilmente a otra zona horaria para presentarla al usuario. Use un nombre de zona horaria adecuado , nunca los códigos de 3-4 letras como
EST
oIST
.Genere una representación de cadena de ese valor de fecha y hora, localizado.
Instant
O, para permanecer en UTC, use
Instant
. UnInstant
objeto representa un momento en la línea de tiempo, a una resolución de nanosegundos, siempre en UTC. Esto proporciona el bloque de construcción para una fecha y hora zonificada, junto con una asignación de zona horaria. Puedes pensarlo conceptualmente de esta manera:Puede extraer un
Instant
de aZonedDateTime
.Puedes comenzar con un Instant. No es necesario especificar una zona horaria aquí, como
Instant
siempre es en UTC.fuente
Prefiero usar el objeto Calendario.
Me resulta mucho más fácil trabajar con él. También puede obtener un objeto Fecha del Calendario.
http://java.sun.com/javase/6/docs/api/java/util/GregorianCalendar.html
fuente
Calendar.getInstance()
En Java 8 es:
fuente
Tenga en cuenta que el objeto Date es mutable y si desea hacer algo sofisticado, use jodatime .
fuente
java.lang.System.currentTimeMillis();
devolverá la fecha y hora desde la épocafuente
fuente
Si crea un nuevo objeto Fecha, de forma predeterminada se establecerá en la hora actual:
fuente
Java siempre ha tenido un soporte inadecuado para los casos de uso de fecha y hora. Por ejemplo, las clases existentes (como
java.util.Date
ySimpleDateFormatter
) no son seguras para subprocesos, lo que puede provocar problemas de concurrencia. También hay ciertos defectos en la API. Por ejemplo, los años quejava.util.Date
comienzan en 1900, los meses comienzan en 1 y los días comienzan en 0, lo que no es muy intuitivo. Estos problemas llevaron a la popularidad de las bibliotecas de fecha y hora de terceros, comoJoda-Time
. Para abordar una nueva fecha y hora, la API está diseñada para Java SE 8.Según el documento :
fuente