Comment obtenir la date et l'heure actuelles en Java?
Je cherche quelque chose qui est équivalent à DateTime.Now
C #.
Comment obtenir la date et l'heure actuelles en Java?
Je cherche quelque chose qui est équivalent à DateTime.Now
C #.
Réponses:
Construisez simplement un nouvel Date
objet sans aucun argument; cela affectera la date et l'heure actuelles au nouvel objet.
import java.util.Date;
Date d = new Date();
Dans les mots des Javadocs pour le constructeur à zéro argument :
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.Date
et 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. :)
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:
DateTime dt = new DateTime();
Mettre à jour
Comme indiqué dans les commentaires, les dernières versions de Joda Time ont une DateTime.now()
méthode, donc:
DateTime dt = DateTime.now();
Instant.now()
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.
ZonedDateTime now = ZonedDateTime.now();
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.
ZoneId z = ZoneId.of( "Pacific/Auckland" );
ZonedDateTime zdt = ZonedDateTime.now( z );
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.
Instant instant = Instant.now();
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 un ZoneOffset
objet. Pour UTC, utilisez la constante pratique pour UTC .
OffsetDateTime odt = instant.atOffset( ZoneOffset.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 EST
ou 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.
String output = DateTimeFormatter
.ofLocalizedDate( FormatStyle.FULL )
.withLocale( Locale.CANADA_FRENCH )
.format ( nowMontreal );
Instant
Ou, pour rester en UTC, utilisez Instant
. Un Instant
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'un ZonedDateTime
.
Instant instantNow = zdt.toInstant();
Vous pouvez commencer par un instantané. Pas besoin de spécifier ici un fuseau horaire, comme Instant
c'est toujours le cas en UTC.
Instant now = Instant.now();
Je préfère utiliser l'objet Calendrier.
Calendar now = GregorianCalendar.getInstance()
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
Calendar.getInstance()
En Java 8, c'est:
ZonedDateTime dateTime = ZonedDateTime.now();
java.lang.System.currentTimeMillis();
renverra le datetime depuis l'époque
Si vous créez un nouvel objet Date, par défaut, il sera défini sur l'heure actuelle:
import java.util.Date;
Date now = new Date();
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
et 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.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 que Joda-Time
. Pour répondre à une nouvelle date et heure, l'API est conçue pour Java SE 8.
LocalDateTime timePoint = LocalDateTime.now();
System.out.println(timePoint);
Selon doc :
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.