2016-01-11 1 views
0
long nanoseconds = System.nanoTime(); 
    long microseconds = nanoseconds/1000; 
    long miliseconds = microseconds/1000; 
    long seconds = miliseconds/1000; 
    long minutes = seconds/60; 
    long hours = minutes/60; 

    System.out.println (hours); 

En cas d'exécution à ~ 11 h 35 sur ma machine Windows, affiche 26. Il ne peut pas y avoir 26 heures dans une journée et même s'il y en avait, ce n'est même pas proche du résultat attendu 11. Pourquoi ça ne marche pas? (Aussi, je ne veux pas utiliser une bibliothèque Time Date, je sais qu'il existe des moyens plus faciles là-bas)Java - Conversion de nanosecondes en HH/MM/SS

J'espère que tous les formats correctement depuis que je suis sur mon téléphone. Merci tout le monde!

+0

vous n'avez pas effectué les calculs assez loin. 'days = heures/24'? –

+0

"Cette méthode ne peut être utilisée que pour mesurer le temps écoulé et n'est liée à aucune autre notion de système ou d'horloge murale La valeur retournée représente des nanosecondes depuis un certain temps d'origine fixe mais arbitraire (peut-être à l'avenir négative) La même origine est utilisée par toutes les invocations de cette méthode dans une instance d'une machine virtuelle Java, les autres instances de machines virtuelles sont susceptibles d'utiliser une origine différente. " –

Répondre

4

De l'Oracle Documentation vous pouvez lire ceci:

Cette méthode ne peut être utilisée pour mesurer le temps écoulé et n'est pas liée à une autre notion de système ou de temps-horloge murale. La valeur renvoyée représente des nanosecondes depuis un temps fixe mais arbitraire (peut-être dans le futur, donc les valeurs peuvent ê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 sur la fréquence à laquelle les valeurs changent. Les différences dans les appels successifs qui dépassent environ 292 ans (263 nanosecondes) ne permettent pas de calculer avec précision le temps écoulé en raison du dépassement numérique.

Vous ne devriez donc pas utiliser cette méthode.

+0

Oh d'accord, merci. Donc, je cherche la précision et la vitesse quand il s'agit d'imprimer un horodatage alors je me suis dit que l'utilisation d'un objet date-heure serait une mauvaise idée. Que recommandez-vous? – Hatefiend

+1

Qu'en est-il de 'System.currentTimeMillis()'? –

+0

Donc System.currentTimeMillis() fonctionne de cette façon mais NanoTime() ne fonctionne pas? – Hatefiend