2010-01-06 31 views
326

¿Cómo obtengo la fecha actual en Java?Equivalente al DateTime.Now de C# en Java?

En C# es DateTime.Now.

+0

Esta pregunta es anterior a [esta pregunta] (http://stackoverflow.com/q/5175728/642706) anteriormente marcó como un duplicado. Así que invierte la designación, volviendo a abrir esta pregunta y marcando la nueva como duplicada. –

+1

El título en el "duplicado" es más claro, y se encuentra más fácilmente a través de la Búsqueda de Google – ragerdl

Respuesta

402

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

import java.util.Date; 

Date d = new Date(); 

En palabras de the Javadocs para the zero-argument constructor:

asigna un objeto Date y inicializa de forma que representa la hora a la que se le asignó, medida a la milésima de segundo más cercano.

Asegúrese de que está utilizando y no java.util.Datejava.sql.Date - este último no tiene un constructor cero-arg, y tiene un tanto diferentes semánticas que son el tema de una conversación totalmente diferente. :)

+13

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. –

+0

Desde fecha doc: a partir de JDK 1.1, la clase Calendario se debe usar para convertir entre campos de fecha y hora y la clase DateFormat se debe usar para formatear y analizar cadenas de fecha. –

+8

Considere las nuevas API de Java8 - [LocalDateTime.now() y ZonedDateTime.now()] (http://stackoverflow.com/a/26225884/513342) –

12
import java.util.Date; 
Date now = new Date(); 

Tenga en cuenta que el objeto Date es mutable y si usted quiere hacer nada sofisticada, utilice jodatime.

+0

Se agregó "nuevo" para corregir el error. –

5

Si crea un nuevo objeto Date, por defecto se establecerá en el momento actual:

import java.util.Date; 
Date now = new Date(); 
58

El Java Date y Calendar clases por muchos como mal diseñados. Debería echarle un vistazo al Joda Time, una biblioteca comúnmente utilizada en lugar de las bibliotecas de fechas incorporadas de Java.

El equivalente de DateTime.Now en Joda El tiempo es:

DateTime dt = new DateTime(); 

actualización

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(); 
+4

La versión actual (2.1) de Joda parece tener un método estático DateTime.now() (acepta opcionalmente DateTimeZone o Chronology). http://joda-time.sourceforge.net/apidocs/org/joda/time/DateTime.html#now%28%29 –

+1

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] (https://docs.oracle.com/javase/tutorial/datetime/index.html) y muchos otros artículos en línea para obtener más información. – DavidS

10

java.lang.System.currentTimeMillis(); devolverá la fecha y hora desde la época

+0

Bueno para el registro, pero requiere un análisis y conversión para mostrar al usuario –

6
import org.joda.time.DateTime; 

DateTime now = DateTime.now(); 
13

En Java 8 es:

ZonedDateTime dateTime = ZonedDateTime.now(); 
27

tl; dr

Instant.now() 

java.time

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

ZonedDateTime

Consigue el momento actual en java.time.

ZonedDateTime now = ZonedDateTime.now(); 

Un ZonedDateTime encapsula:

  • fecha.
  • Hora del día, con una fracción de segundo a la resolución nanosecond.
  • Huso horario.

Si no se especifica la zona horaria, la zona horaria predeterminada actual de su JVM se asigna en silencio. 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

Generalmente mejor conseguir en el hábito de hacer su trabajo de back-end (lógica de negocios, base de datos, el almacenamiento, el intercambio de datos), todo en UTC zona horaria. El código anterior se basa implícitamente en la zona horaria predeterminada actual de la JVM.

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

Instant instant = Instant.now(); 

La clase Instant es una clase de bloques de construcción básica en java.time y se pueden utilizar a menudo en su código.

Cuando necesite más flexibilidad en el formateo, transfórmelo en un OffsetDateTime. Especifique un objeto ZoneOffset. Para UTC, use el práctico constant for UTC.

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

zona horaria

ajustar fácilmente a otra zona horaria para su presentación al usuario. Utilice proper time zone name, nunca los códigos de 3-4 letras como EST o IST.

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

Genera 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 objeto Instant representa un momento en la línea de tiempo, a una resolución de nanosegundos, siempre en UTC. Esto proporciona el elemento básico para una fecha-hora zonal, junto con una asignación de zona horaria.Usted puede pensar que es conceptualmente esta manera:

ZonedDateTime = Instant + ZoneId

se puede extraer un Instant de un ZonedDateTime.

Instant instantNow = zdt.toInstant(); 

Puede comenzar con un Instante. No es necesario especificar un huso horario aquí, ya que Instant siempre está en UTC.

Instant now = Instant.now(); 
+0

También publiqué [otra respuesta] (http://stackoverflow.com/a/39379431/642706) con más detalles sobre una pregunta duplicada. –

2

Java siempre tiene 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 generar problemas de simultaneidad. También hay ciertos defectos en API. Por ejemplo, los años en java.util.Date comienzan a las 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 hacer frente a una nueva fecha y hora de la API está diseñada para Java SE 8.

LocalDateTime timePoint = LocalDateTime.now(); 
System.out.println(timePoint); 

Según doc:

now() El método devuelve la fecha actual en tiempo usando el sistema reloj y el tiempo predeterminado -zone, no nulo. Obtiene la fecha actual desde el reloj del sistema en la zona horaria predeterminada. Esto hará que consulte el reloj del sistema en la zona horaria predeterminada para obtener la fecha y hora actual . El uso de este método evitará la posibilidad de utilizar un reloj alternativo para la prueba porque el reloj está codificado.