42 votes

Comment obtenir l'heure du système en Java sans créer une nouvelle date ?

J'ai besoin d'obtenir la date du système, et Java fournit l'information suivante new Date().getTime() .

Mais je dois éviter l'allocation de nouveaux objets (je travaille sur un système embarqué). Comment puis-je obtenir le temps système sans allouer un nouvel objet ? Date objet ?

62voto

Jon Skeet Points 692016

Comme le dit jzd, vous pouvez utiliser System.currentTimeMillis . Si vous en avez besoin sur a Date mais ne veulent pas créer un objet nouveau Date vous pouvez utiliser Date.setTime pour réutiliser une Date objet. Personnellement, je déteste le fait que Date est mutable, mais peut-être c'est utile pour vous dans ce cas particulier. De même, Calendar a un setTimeInMillis méthode.

Cependant, si cela est possible, il serait probablement préférable de le garder en tant que long . Si vous n'avez besoin que d'un horodatage, effectivement, ce serait la meilleure approche.

51voto

jzd Points 17369

Cela devrait fonctionner :

System.currentTimeMillis();

12voto

Mark Elliot Points 31871

Vous pouvez utiliser System.currentTimeMillis() .

Au moins dans OpenJDK, Date utilise ça sous les couvertures.

L'appel en System est une méthode native de la JVM, nous ne pouvons donc pas affirmer avec certitude qu'il n'y a pas d'allocation sous le manteau, bien que cela semble peu probable ici.

8voto

Pangea Points 36713

Utilisez System.currentTimeMillis() ou System.nanoTime() .

2 votes

D'après la documentation sur nanoTime() : Cette méthode ne peut être utilisée que pour mesurer le temps écoulé et n'est liée à aucune autre notion de temps système ou d'horloge murale. La valeur renvoyée représente les nanosecondes écoulées depuis un moment fixe mais arbitraire (peut-être dans le futur, les valeurs peuvent donc être négatives). Cette méthode fournit une précision de l'ordre de la nanoseconde, mais pas nécessairement une précision de l'ordre de la nanoseconde. Aucune garantie n'est donnée quant à la fréquence de changement des valeurs. Les différences entre des appels successifs qui s'étendent sur plus de 292 ans environ (263 nanosecondes) ne permettront pas de calculer avec précision le temps écoulé en raison d'un débordement numérique.

0 votes

Je crois que @AaronF voulait dire 2^63 nanosecondes. :-)

2voto

avanek Points 1253

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