время в миллисекундах в Java - PullRequest
2 голосов
/ 27 июля 2010

Я определяю время транзакций в моем Java-приложении. В начале транзакции я получаю время начала, создавая экземпляр Calendar, а затем получаю часы, минуты, секунды и миллисекунды. Я завершаю транзакцию, создаю новый календарь и получаю новый час, минуту, секунду и миллисекунду. Я считаю, что разница между временем начала и временем окончания - это время транзакции. Похоже, что это работает большую часть времени, но лишь незначительная часть времени, время окончания раньше, чем время начала. Почему это произошло и как я могу предотвратить это?

1 Ответ

8 голосов
/ 27 июля 2010

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

Однако, если ваши системные часы обновляются с помощью NTP или чего-то подобного, тогда время от времени может эффективно возвращаться назад - в зависимости от того, как обрабатывается перекос часов.(Некоторые системы просто на некоторое время замедляют системные часы, чтобы вернуть их к реальности; у других могут быть разрывы.)

Я не уверен, что лучше всего избежать этого - я не поверьте JRE в настоящее время имеет что-то, эквивалентное Stopwatch в .NET, которое предназначено исключительно для измерения интервалов и не (как я полагаю) не испортит изменение системных часов.

(Iследуйте рекомендациям Эрика Время Джода , кстати - хотя я не думаю, что вам это нужно для этой конкретной проблемы.)

...