web-dev-qa-db-fra.com

Équivalent de DateTime.Now de C # en Java?

Comment puis-je obtenir la date actuelle en Java?

En C # c'est DateTime.Now.

341
mrblah

Il suffit de construire un nouvel objet Date sans aucun argument; cela assignera la date et l'heure actuelles au nouvel objet.

import Java.util.Date;

Date d = new Date();

Dans les mots de les Javadocs pour le constructeur à zéro argument :

Alloue un objet Date et l'initialise de sorte qu'il représente l'heure à laquelle il a été attribué , mesuré à la milliseconde près.

Assurez-vous que vous utilisez Java.util.Date et non pas 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 totalement différente. :)

411
delfuego

Les classes Java Date et Calendrier sont considérées par beaucoup comme mal conçues. Vous devriez jeter un oeil à Joda Time , une bibliothèque couramment utilisée à la place des bibliothèques de date intégrées de Java.

L'équivalent de DateTime.Now dans Joda Time est:

DateTime dt = new DateTime();

Mettre à jour

Comme indiqué dans les commentaires, les dernières versions de Joda Time ont une méthode DateTime.now(), donc:

DateTime dt = DateTime.now();
58
cdmckay

tl; dr

Instant.now()

Java.time

La classe Java.util.Date a été démodé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:

  • Date.
  • Heure du jour, avec une fraction de seconde à nanosecondes résolution.
  • Fuseau horaire.

Si aucun fuseau horaire n’est spécifié, le fuseau horaire par défaut de votre machine virtuelle Java est attribué en mode silencieux. Il est préférable de spécifier votre fuseau horaire souhaité/attendu plutôt 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 final (logique d’entreprise, base de données, stockage, échange de données) tout en UTC fuseau horaire. Le code ci-dessus repose implicitement sur le fuseau horaire par défaut de la machine virtuelle Java.

La classe Instant représente un moment de la chronologie en UTC avec une résolution en nanosecondes.

Instant instant = Instant.now();

La classe Instant est une classe de bloc de construction de base dans Java.time et peut être utilisée souvent dans votre code.

Lorsque vous avez besoin de plus de souplesse dans le formatage, transformez-le en OffsetDateTime . Spécifiez un objet ZoneOffset . Pour UTC, utilisez handy constante pour UTC .

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

Fuseau horaire

Vous vous adaptez facilement à un autre fuseau horaire pour une présentation à l'utilisateur. Utilisez un nom de fuseau horaire approprié , jamais les codes à 3 ou 4 lettres tels que EST ou IST.

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

Générez une représentation sous forme de chaîne 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 objet Instant représente un moment sur la timeline, à la résolution nanoseconde, toujours en UTC. Ceci fournit le bloc de construction pour une date/heure zonée, ainsi qu'une affectation de fuseau horaire. Vous pouvez penser conceptuellement de cette façon:

ZonedDateTime = Instant + ZoneId

Vous pouvez extraire un Instant d’un ZonedDateTime.

Instant instantNow = zdt.toInstant();

Vous pouvez commencer avec un instant. Inutile de spécifier un fuseau horaire ici, car Instant est toujours en UTC.

Instant now = Instant.now();
33
Basil Bourque

Je préfère utiliser l'objet Calendar.

Calendar now = GregorianCalendar.getInstance()

Je trouve qu'il 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

16
ralph

Dans Java 8 c'est:

ZonedDateTime dateTime = ZonedDateTime.now();
14
Vitalii Fedorenko
import Java.util.Date;   
Date now = new Date();

Notez que l'objet Date est modifiable et si vous voulez faire quelque chose de sophistiqué, utilisez jodatime .

12
Chandra Patni

Java.lang.System.currentTimeMillis(); renverra la date et l'heure depuis l'époque

10
user243773
import org.joda.time.DateTime;

DateTime now = DateTime.now();
6
gordy

Si vous créez un nouvel objet Date, il sera par défaut défini sur l'heure actuelle:

import Java.util.Date;
Date now = new Date();
5
parkerfath

Java a toujours eu un support inadéquat 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 simultanéité. De plus, il y a certaines failles dans l'API. Par exemple, les années dans Java.util.Date commencent à 1900, les mois à 1 et les jours à 0 - pas très intuitif. Ces problèmes ont conduit à la popularité des bibliothèques tierces de date et d'heure, telles que Joda-Time. Pour traiter 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 et l'heure en cours en utilisant l'horloge système et le fuseau horaire par défaut, et non null . Il obtient la date et l'heure actuelles de l'horloge système dans le fuseau horaire par défaut. Ceci interrogera l'horloge système dans le fuseau horaire par défaut pour obtenir la date et l'heure actuelles. L'utilisation de cette méthode empêchera l'utilisation d'une autre horloge pour les tests, car l'horloge est codée en dur.

3
i_am_zero