Cette question est plus ancienne que cette question anciennement marquée comme doublon. J'ai donc inversé la désignation, en rouvrant cette question et en marquant la nouvelle comme étant la copie.
Basil Bourque
Réponses:
414
Construisez simplement un nouvel Dateobjet sans aucun argument; cela affectera la date et l'heure actuelles au nouvel objet.
Alloue un objet Date et l' initialise pour qu'il représente l'heure à laquelle il a été alloué , mesurée à la milliseconde près.
Assurez-vous que vous utilisez java.util.Dateet non java.sql.Date- ce dernier n'a pas de constructeur à zéro argument et a une sémantique quelque peu différente qui fait l'objet d'une conversation entièrement différente. :)
Notez également que GregorianCalendar et de nombreux objets similaires fonctionnent de la même manière. Donc, quel que soit le type d'objet date / calendrier avec lequel vous travaillez, le constructeur zéro argument initialise généralement l'objet à la date / heure actuelle.
Peter Di Cecco
From Date doc: à partir de JDK 1.1, la classe Calendar doit être utilisée pour convertir entre les dates et les champs d'heure et la classe DateFormat doit être utilisée pour formater et analyser les chaînes de date.
Les classes Java Date et Calendar sont considérées par beaucoup comme mal conçues. Vous devriez jeter un œil à Joda Time , une bibliothèque couramment utilisée à la place des bibliothèques de dates intégrées de Java.
L'équivalent de DateTime.NowJoda Time est:
DateTime dt =newDateTime();
Mettre à jour
Comme indiqué dans les commentaires, les dernières versions de Joda Time ont une DateTime.now()méthode, donc:
Notez que cette réponse a été publiée en 2010. Java 8 a absorbé bon nombre des meilleures fonctionnalités de Joda Time. Consultez la documentation officielle et de nombreux autres articles en ligne pour plus d'informations.
DavidS
36
tl; dr
Instant.now()
java.time
La classe java.util.Date a été dépassée par le nouveau package java.time ( Tutorial ) dans Java 8 et versions ultérieures. Les anciennes classes java.util.Date/.Calendar sont notoirement gênantes, déroutantes et imparfaites. Évite-les.
Heure du jour, avec une résolution d'une fraction de seconde à une nanoseconde .
Fuseau horaire.
Si aucun fuseau horaire n'est spécifié, le fuseau horaire par défaut actuel de votre machine virtuelle Java est attribué en mode silencieux. Mieux vaut spécifier votre fuseau horaire souhaité / attendu que de s'appuyer implicitement sur la valeur par défaut.
ZoneId z =ZoneId.of("Pacific/Auckland");ZonedDateTime zdt =ZonedDateTime.now( z );
UTC
Il est généralement préférable de prendre l'habitude de faire votre travail back-end (logique métier, base de données, stockage, échange de données) le tout dans le fuseau horaire UTC . Le code ci-dessus repose implicitement sur le fuseau horaire par défaut actuel de la JVM.
La Instantclasse représente un moment de la chronologie en UTC avec une résolution de nanosecondes.
Instant instant =Instant.now();
La Instantclasse est une classe de blocs de construction de base dans java.time et peut être utilisée souvent dans votre code.
Lorsque vous avez besoin de plus de flexibilité dans le formatage, transformez-le en un OffsetDateTime. Spécifiez un ZoneOffsetobjet. Pour UTC, utilisez la constante pratique pour UTC .
Vous vous ajustez facilement à un autre fuseau horaire pour la présentation à l'utilisateur. Utilisez un nom de fuseau horaire correct , jamais les codes à 3 ESTou 4 lettres tels que ou IST.
ZoneId z =ZoneId.of("America/Montreal");ZonedDateTime nowMontreal = instant.atZone( z );
Générez une représentation String de cette valeur date-heure, localisée.
Ou, pour rester en UTC, utilisez Instant. Un Instantobjet représente un instant sur la timeline, à une résolution en nanosecondes, toujours en UTC. Cela fournit le bloc de construction pour une date-heure zonée, ainsi qu'une affectation de fuseau horaire. Vous pouvez y penser conceptuellement de cette façon:
Java a toujours obtenu un support insuffisant pour les cas d'utilisation de la date et de l'heure. Par exemple, les classes existantes (telles que java.util.Dateet SimpleDateFormatter) ne sont pas thread-safe, ce qui peut entraîner des problèmes de concurrence. Il y a aussi certaines failles dans l'API. Par exemple, les années java.util.Datecommencent à 1900, les mois commencent à 1 et les jours commencent à 0, ce qui n'est pas très intuitif. Ces problèmes ont conduit à la popularité des bibliothèques de date et d'heure tierces, telles que Joda-Time. Pour répondre à une nouvelle date et heure, l'API est conçue pour Java SE 8.
La méthode now()renvoie la date-heure actuelle en utilisant l'horloge système et le fuseau horaire par défaut, et non null . Il obtient la date-heure actuelle de l'horloge système dans le fuseau horaire par défaut. Cela interrogera l'horloge système dans le fuseau horaire par défaut pour obtenir la date-heure actuelle. L'utilisation de cette méthode empêchera la possibilité d'utiliser une autre horloge pour les tests car l'horloge est codée en dur.
Réponses:
Construisez simplement un nouvel
Date
objet sans aucun argument; cela affectera la date et l'heure actuelles au nouvel objet.Dans les mots des Javadocs pour le constructeur à zéro argument :
Assurez-vous que vous utilisez
java.util.Date
et nonjava.sql.Date
- ce dernier n'a pas de constructeur à zéro argument et a une sémantique quelque peu différente qui fait l'objet d'une conversation entièrement différente. :)la source
Les classes Java Date et Calendar sont considérées par beaucoup comme mal conçues. Vous devriez jeter un œil à Joda Time , une bibliothèque couramment utilisée à la place des bibliothèques de dates intégrées de Java.
L'équivalent de
DateTime.Now
Joda Time est:Mettre à jour
Comme indiqué dans les commentaires, les dernières versions de Joda Time ont une
DateTime.now()
méthode, donc:la source
tl; dr
java.time
La classe java.util.Date a été dépassée par le nouveau package java.time ( Tutorial ) dans Java 8 et versions ultérieures. Les anciennes classes java.util.Date/.Calendar sont notoirement gênantes, déroutantes et imparfaites. Évite-les.
ZonedDateTime
Obtenez le moment actuel dans java.time.
A
ZonedDateTime
résume:Si aucun fuseau horaire n'est spécifié, le fuseau horaire par défaut actuel de votre machine virtuelle Java est attribué en mode silencieux. Mieux vaut spécifier votre fuseau horaire souhaité / attendu que de s'appuyer implicitement sur la valeur par défaut.
UTC
Il est généralement préférable de prendre l'habitude de faire votre travail back-end (logique métier, base de données, stockage, échange de données) le tout dans le fuseau horaire UTC . Le code ci-dessus repose implicitement sur le fuseau horaire par défaut actuel de la JVM.
La
Instant
classe représente un moment de la chronologie en UTC avec une résolution de nanosecondes.La
Instant
classe est une classe de blocs de construction de base dans java.time et peut être utilisée souvent dans votre code.Lorsque vous avez besoin de plus de flexibilité dans le formatage, transformez-le en un
OffsetDateTime
. Spécifiez unZoneOffset
objet. Pour UTC, utilisez la constante pratique pour UTC .Fuseau horaire
Vous vous ajustez facilement à un autre fuseau horaire pour la présentation à l'utilisateur. Utilisez un nom de fuseau horaire correct , jamais les codes à 3
EST
ou 4 lettres tels que ouIST
.Générez une représentation String de cette valeur date-heure, localisée.
Instant
Ou, pour rester en UTC, utilisez
Instant
. UnInstant
objet représente un instant sur la timeline, à une résolution en nanosecondes, toujours en UTC. Cela fournit le bloc de construction pour une date-heure zonée, ainsi qu'une affectation de fuseau horaire. Vous pouvez y penser conceptuellement de cette façon:Vous pouvez extraire un
Instant
d'unZonedDateTime
.Vous pouvez commencer par un instantané. Pas besoin de spécifier ici un fuseau horaire, comme
Instant
c'est toujours le cas en UTC.la source
Je préfère utiliser l'objet Calendrier.
Je trouve que c'est beaucoup plus facile de travailler avec. Vous pouvez également obtenir un objet Date à partir du calendrier.
http://java.sun.com/javase/6/docs/api/java/util/GregorianCalendar.html
la source
Calendar.getInstance()
En Java 8, c'est:
la source
Notez que l' objet Date est modifiable et si vous voulez faire quelque chose de sophistiqué, utilisez jodatime .
la source
java.lang.System.currentTimeMillis();
renverra le datetime depuis l'époquela source
la source
Si vous créez un nouvel objet Date, par défaut, il sera défini sur l'heure actuelle:
la source
Java a toujours obtenu un support insuffisant pour les cas d'utilisation de la date et de l'heure. Par exemple, les classes existantes (telles que
java.util.Date
etSimpleDateFormatter
) ne sont pas thread-safe, ce qui peut entraîner des problèmes de concurrence. Il y a aussi certaines failles dans l'API. Par exemple, les annéesjava.util.Date
commencent à 1900, les mois commencent à 1 et les jours commencent à 0, ce qui n'est pas très intuitif. Ces problèmes ont conduit à la popularité des bibliothèques de date et d'heure tierces, telles queJoda-Time
. Pour répondre à une nouvelle date et heure, l'API est conçue pour Java SE 8.Selon doc :
la source