Как получить дельту времени независимо от системного времени? - PullRequest
3 голосов
/ 23 августа 2011

Я пишу простой таймер на Java.Он имеет кнопки «Пуск» и «Стоп», а также текстовое представление, показывающее, сколько времени прошло с момента запуска таймера.

Он реализован путем установки начального времени с помощью System.currentTimeMillis() и обновления текущего значения каждую секунду в цикле.

Проблема в том, что, если я изменяю системное время во время работы таймера, все измерения не пройдены.Например, если я установил время на один месяц назад, таймер отобразит отрицательное значение, так как currentTimeMillis() теперь возвращает меньшее значение, чем начальное.

Итак, как рассчитать дельту времени, которая не будет зависеть от системного времени?Также было бы здорово сделать это решение кроссплатформенным.

Ответы [ 4 ]

10 голосов
/ 23 августа 2011

Использование:

System.nanoTime()

Это должно сделать это.Он не учитывает системное время и может использоваться только для измерения прошедшего времени.Что ты хочешь?Вам нужно разделить на 1 миллион, чтобы получить прошедшие миллисекунды.См. Также Javadocs.

4 голосов
/ 23 августа 2011
System.nanoTime();

С Javadoc :

Этот метод может использоваться только для измерения прошедшего времени и не связан с каким-либо другим понятием системного или настенного времени.

1 голос
/ 23 августа 2011

Используйте время веб-сервисов. например это или это или это

0 голосов
/ 12 августа 2012

Вы можете установить демона как NTP, системное время прыгает в любом направлении, имеет много проблем и может привести к множеству других проблем.

System.nanoTime() не обязательно зависит от системных часов - но это может - просто убедитесь, что системное время правильно прогрессирует. Изменение системного времени является привилегированной операцией, поэтому, если кто-то сделает это, он узнает об этом лучше.

Вот ошибка 13 лет в том же случае: http://bugs.sun.com/view_bug.do?bug_id=4290274

НТН

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...