109 votes

Heure actuelle en microsecondes en java

Sur un système Unix, existe-t-il un moyen d’obtenir un horodatage avec une précision de niveau microseconde en Java? Quelque chose comme C gettimeofday fonction.

154voto

AlBlue Points 7768

Non, Java n'a pas cette capacité.

Il possède System.nanoTime (), mais cela ne fait que compenser l’heure connue. Ainsi, même si vous ne pouvez pas en prendre le nombre absolu, vous pouvez l’utiliser pour mesurer une précision à la nanoseconde (ou supérieure).

Notez que le JavaDoc indique que si cela fournit une précision nanoseconde, cela ne signifie pas une précision nanoseconde. Prenez donc un module suffisamment grand de la valeur de retour.

56voto

cletus Points 276888

Vous pouvez utiliser System.nanoTime() :

 long start = System.nanoTime();
// do stuff
long end = System.nanoTime();
long microseconds = (end - start) / 1000;
 

obtenir le temps en nanosecondes mais c'est une mesure strictement relative. Cela n'a pas de sens absolu. Ce n'est utile que si vous comparez à d'autres nanotechnologies pour mesurer le temps qu'il faut à quelque chose.

14voto

Jason Smith Points 101

Comme d'autres affiches déjà indiqué; l'horloge de votre système est probablement pas synchronisée jusqu'à microsecondes pour le monde réel le temps. Néanmoins microseconde précision les horodatages utile comme un hybride à la fois indiquant mur en cours de temps, et de mesure/de profilage de la durée des choses.

Je l'étiquette de tous les événements, les messages écrits dans un journal de fichiers à l'aide des horodateurs, comme "2012-10-21 19:13:45.267128". Ces véhiculent à la fois quand il est arrivé (le"mur" de temps), et peut également être utilisé pour mesurer la durée entre le présent et l'événement suivant dans le fichier journal (différence relative en microsecondes).

Pour y parvenir, vous avez besoin de lien Système.currentTimeMillis() avec le Système.nanoTime() et de travailler exclusivement avec le Système.nanoTime() à partir de ce moment-là. Exemple de code:

/**
 * Class to generate timestamps with microsecond precision
 * For example: MicroTimestamp.INSTANCE.get() = "2012-10-21 19:13:45.267128"
 */ 
public enum MicroTimestamp 
{  INSTANCE ;

   private long              startDate ;
   private long              startNanoseconds ;
   private SimpleDateFormat  dateFormat ;

   private MicroTimestamp()
   {  this.startDate = System.currentTimeMillis() ;
      this.startNanoseconds = System.nanoTime() ;
      this.dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS") ;
   }

   public String get()
   {  long microSeconds = (System.nanoTime() - this.startNanoseconds) / 1000 ;
      long date = this.startDate + (microSeconds/1000) ;
      return this.dateFormat.format(date) + String.format("%03d", microSeconds % 1000) ;
   }
}

-5voto

jangxx Points 504

Je suggérerais l'utilisation de System.currentTimeMillis() . Il renvoie le nombre de millisecondes écoulées depuis l'époque UNIX.

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