¿Cómo obtengo la fecha y hora actuales en Java?
Estoy buscando algo que sea equivalente a DateTime.Now
C #.
¿Cómo obtengo la fecha y hora actuales en Java?
Estoy buscando algo que sea equivalente a DateTime.Now
C #.
Respuestas:
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 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.Date
y 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. :)
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:
DateTime dt = new DateTime();
Actualizar
Como se señaló en los comentarios, las últimas versiones de Joda Time tienen un DateTime.now()
método, por lo que:
DateTime dt = DateTime.now();
Instant.now()
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.
ZonedDateTime now = ZonedDateTime.now();
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.
ZoneId z = ZoneId.of( "Pacific/Auckland" );
ZonedDateTime zdt = ZonedDateTime.now( z );
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.
Instant instant = Instant.now();
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 un ZoneOffset
objeto. Para UTC, use la constante útil para UTC .
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC );
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
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, use Instant
. Un Instant
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 a ZonedDateTime
.
Instant instantNow = zdt.toInstant();
Puedes comenzar con un Instant. No es necesario especificar una zona horaria aquí, como Instant
siempre es en UTC.
Instant now = Instant.now();
Prefiero usar el objeto Calendario.
Calendar now = GregorianCalendar.getInstance()
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
Calendar.getInstance()
En Java 8 es:
ZonedDateTime dateTime = ZonedDateTime.now();
java.lang.System.currentTimeMillis();
devolverá la fecha y hora desde la época
Si crea un nuevo objeto Fecha, de forma predeterminada se establecerá en la hora actual:
import java.util.Date;
Date now = new Date();
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
y 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.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, como Joda-Time
. Para abordar una nueva fecha y hora, la API está diseñada para Java SE 8.
LocalDateTime timePoint = LocalDateTime.now();
System.out.println(timePoint);
Según el documento :
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.