Comment puis-je obtenir la date actuelle en Java?
En C # c'est DateTime.Now
.
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. :)
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();
Instant.now()
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:
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 );
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 );
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:
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();
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
Dans Java 8 c'est:
ZonedDateTime dateTime = ZonedDateTime.now();
Java.lang.System.currentTimeMillis();
renverra la date et l'heure depuis l'époque
import org.joda.time.DateTime;
DateTime now = DateTime.now();
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();
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.