2016-01-11 3 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); 

Когда на моей машине с Windows набежал ~ 11: 35 утра, печатает 26. Не может быть 26 часов в день, и даже если бы это было, это даже близко к ожидаемому результату 11. Почему это не работает? (Также я не хочу использовать какую-либо библиотеку Time Date, я знаю, что там есть более простые способы)Java - конвертировать наносекунды в HH/MM/SS

Надеюсь, что все это правильно, так как я нахожусь на своем телефоне. Всем спасибо!

+0

Вы не выполнили вычисления достаточно далеко. 'days = hours/24'? –

+0

«Этот метод может использоваться только для измерения прошедшего времени и не имеет отношения к какому-либо другому понятию системного или настенного времени. Возвращаемое значение представляет собой наносекунды с некоторого фиксированного, но произвольного времени начала (возможно, в будущем, поэтому значения могут быть отрицательный). То же самое происхождение используется всеми вызовами этого метода в экземпляре виртуальной машины Java, другие экземпляры виртуальной машины могут использовать другое происхождение ». –

ответ

4

С Oracle Documentation вы можете прочитать:

Этого метод может быть использован только для измерения затраченного времени и не связан с каким-либо другим понятием системы или на стену часов времени. Возвращаемое значение представляет собой наносекунды с некоторого фиксированного, но произвольного времени (возможно, в будущем, поэтому значения могут быть отрицательными). Этот метод обеспечивает наносекундную точность, но не обязательно наносекундную точность. Никаких гарантий относительно того, как часто меняются ценности, не делается. Различия в последовательных вызовах, превышающие примерно 292 года (263 наносекунды), не будут точно вычислять прошедшее время из-за численного переполнения.

Поэтому вы не должны использовать этот метод.

+0

О, ладно спасибо. Поэтому я ищу точность и скорость, когда дело доходит до печати штампа времени, поэтому я решил, что использование объекта с датой даты будет плохой идеей. Что вы порекомендуете? – Hatefiend

+1

Как насчет 'System.currentTimeMillis()'? –

+0

Так System.currentTimeMillis() работает таким образом, но NanoTime() не делает? – Hatefiend

Смежные вопросы