869 votes

Comment obtenir la date et l'heure actuelles en Java ?

Quelle est la meilleure façon d'obtenir la date et l'heure actuelles en Java ?

29 votes

À partir de Java 8, vous pouvez simplement utiliser : LocalDateTime ldt = LocalDateTime.now() ;

7 votes

@RamanSB LocalDateTime es no appropriée, car elle a délibérément perd le fuseau horaire informations. Vous vous débarrassez d'informations précieuses et ne gagnez rien en retour. ZonedDateTime.now() conserve les informations relatives au fuseau horaire. Voir ma réponse pour les détails.

2 votes

Si vous ne pouvez pas faire confiance à votre horloge système, consultez Java : Obtenir la date et l'heure actuelles du serveur et non de l'horloge du système .

788voto

Stephen C Points 255558

Cela dépend de la forme de date/heure que vous souhaitez :

  • Si vous voulez que la date/heure soit une valeur numérique unique, alors System.currentTimeMillis() vous donne cette valeur, exprimée en nombre de millisecondes après l'époque UNIX (en tant que valeur Java long ). Cette valeur est un delta par rapport à un point de temps UTC, et est indépendante du fuseau horaire local. 1 .

  • Si vous souhaitez obtenir la date et l'heure dans un formulaire qui vous permet d'accéder aux composants (année, mois, etc.) sous forme numérique, vous pouvez utiliser l'une des méthodes suivantes :

    • new Date() vous donne un Date objet initialisé avec la date et l'heure actuelles. Le problème est que l'objet Date Les méthodes de l'API sont pour la plupart défectueuses ... et dépréciées.

    • Calendar.getInstance() vous donne un Calendar initialisé avec la date et l'heure actuelles, en utilisant les paramètres par défaut de l'objet Locale y TimeZone . D'autres surcharges vous permettent d'utiliser une fonction spécifique de Locale et/ou TimeZone . Calendar fonctionne ... mais les API sont toujours encombrantes.

    • new org.joda.time.DateTime() vous donne un Joda-time objet initialisé avec la date/heure actuelle, en utilisant le fuseau horaire et la chronologie par défaut. Il existe de nombreuses autres alternatives à Joda ... trop nombreuses pour être décrites ici. (Mais notez que certaines personnes rapportent que l'heure Joda a des problèmes de performances ; par exemple https://stackoverflow.com/questions/6280829. )

    • en Java 8, l'appel java.time.LocalDateTime.now() y java.time.ZonedDateTime.now() vous donnera des représentations 2 pour la date et l'heure actuelles.

Avant Java 8, la plupart des gens qui s'y connaissent en la matière recommandaient Joda-time comme ayant (de loin) les meilleures API Java pour faire des choses impliquant des calculs de points de temps et de durée.

Avec Java 8 et les versions ultérieures, la norme java.time est recommandé. Joda time est désormais considéré comme "obsolète", et les mainteneurs de Joda recommandent aux gens de migrer. 3 .


1 - System.currentTimeMillis() donne l'heure "système". Bien qu'il soit normal que l'horloge du système soit réglée sur l'heure UTC (nominale), il y aura une différence (un delta) entre l'horloge UTC locale et l'heure UTC réelle. La taille de ce delta dépend de la qualité (et de la fréquence) de la synchronisation de l'horloge du système avec l'UTC.
2 - Notez que LocalDateTime n'inclut pas de fuseau horaire. Comme le dit la javadoc : "Il ne peut pas représenter un instant sur la ligne du temps sans informations supplémentaires telles qu'un décalage ou un fuseau horaire".
3 - Remarque : votre code Java 8 ne sera pas cassé si vous ne migrez pas, mais la base de code Joda peut éventuellement cesser de recevoir des corrections de bogues et d'autres correctifs. En 2020-02, une "fin de vie" officielle pour Joda n'a pas été annoncée, et les API Joda n'ont pas été marquées comme étant dépréciées.

0 votes

@Stephen Que vouliez-vous dire par "Cette valeur est un delta par rapport à un point de temps UTC, et est indépendante du fuseau horaire local" ?

0 votes

@StephenC Je n'ai pas compris la partie qui dit "delta d'un point de temps UTC, et est indépendant du fuseau horaire local".

4 votes

@Geek - System.currentTimeMillis() est approximativement UTC, et il y a probablement une différence (delta) entre l'horloge locale UTC et le véritable UTC. System.currentTimeMillis() est indépendant du fuseau horaire local ... eh bien ... parce qu'il s'agit de l'UTC, et l'UTC est le même quel que soit le fuseau horaire local de l'ordinateur, de l'utilisateur ou de toute autre chose.

450voto

Eugenio Paolo Points 1146

(Attention : à utiliser uniquement avec les versions de Java <8. Pour Java 8+, consultez les autres réponses).

Si vous avez simplement besoin de produire un horodatage au format AAAA.MM.DD-HH.MM.SS (cas très fréquent), voici comment procéder :

String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());

7 votes

Devrait être légèrement plus rapide (au moment de l'exécution) avec un format statique final DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss") ;

5 votes

SimpleDateFormat est vieux et a vraiment mauvais les problèmes de concurrence (vous ne soupçonnez pas que cela ait un rapport avec la concurrence mais stackoverflow.com/questions/6840803 ), veuillez utiliser Java 8 stackoverflow.com/a/26225884/513342

2 votes

Pour votre information, les anciennes classes de date-heure gênantes telles que java.util.Date , java.util.Calendar et java.text.SimpleDateFormat sont maintenant héritage supprimé par le java.time intégrées à Java 8 et aux versions ultérieures. Voir Tutoriel par Oracle .

121voto

Golu Points 7213

Si vous voulez que la date actuelle soit une chaîne, essayez ceci :

DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = new Date();
System.out.println(dateFormat.format(date));

o

DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Calendar cal = Calendar.getInstance();
System.out.println(dateFormat.format(cal.getTime()));

http://www.mkyong.com/java/java-how-to-get-current-date-time-date-and-calender/

0 votes

Si vous aimez les lignes simples System.out.println( new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(new Date())) ;

0 votes

Pour votre information, les anciennes classes de date-heure gênantes telles que java.util.Date , java.util.Calendar et java.text.SimpleDateFormat sont maintenant héritage supprimé par le java.time intégrées à Java 8 et aux versions ultérieures. Voir Tutoriel par Oracle .

0 votes

Comment puis-je ignorer l'heure d'été ? Je suis au Brésil et nous n'avons plus l'heure d'été, mais Java continue de penser que nous l'avons. Quelque chose ZonedDateTime.now(ZoneId.of("America/Sao_Paulo")) donne la mauvaise heure, avec 1 heure d'avance.

97voto

Oleg Mikheev Points 6566

En Java 8 c'est le cas :

LocalDateTime.now()

et au cas où vous auriez besoin d'informations sur le fuseau horaire :

ZonedDateTime.now()

et au cas où vous voudriez imprimer une chaîne de caractères formatée de façon fantaisiste :

System.out.println(ZonedDateTime.now().format(DateTimeFormatter.RFC_1123_DATE_TIME))

5 votes

C'est génial - je n'avais besoin que du temps : LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_TIME)

0 votes

Attention LocalDateTime fait no représente un moment. Dépourvue de tout concept de fuseau horaire ou de décalage par rapport à l'UTC, cette classe est no un point sur la ligne de temps. Je ne vois pas de cas où appeler LocalDateTime.now() est la bonne chose à faire. Pour plus d'explications, voir ma réponse .

64voto

Amir Afghani Points 17519

Il suffit de créer un objet Date...

import java.util.Date;

Date date = new Date();

18 votes

Le constructeur vide n'est pas déprécié, n'est-ce pas ? [docs.oracle.com/javase/7/docs/api/java/util/Date.html#Date()](http://docs.oracle.com/javase/7/docs/api/java/util/Date.html#Date())

4 votes

Non la classe java.util.Date et ce constructeur sont no officiellement déprécié à partir de Java 8. Plusieurs de ses méthodes le sont, mais pas toutes. Cependant, il existe d'autres raisons d'éviter cette classe et la classe .Calendar également. Maintenant supplantée par le nouveau paquet java.time dans Java 8.

4 votes

Date() Alloue un objet Date et l'initialise afin qu'il représente l'heure à laquelle il a été alloué, mesurée à la milliseconde près.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X