2

我在我的 Java 应用程序中为各种事务计时。在事务开始时,我通过实例化一个日历然后获取小时、分钟、秒和毫秒来获得开始时间。我完成了事务,实例化了一个新的日历并获得了一个新的小时、分钟、秒和毫秒。我的推理是开始时间和结束时间之间的差异是事务的时间。这似乎在大多数情况下都有效,但在极少数情况下,结束时间早于开始时间。为什么会发生这种情况,我该如何预防?

4

1 回答 1

8

好吧,一方面,计算差异的一种更简单的方法是使用类似的东西System.currentTimeMillis()System.nanoTime()- 这样你不需要做任何事情,除了简单的减法来获得毫秒数或开始之间的纳秒数和结束。

但是,如果您的系统时钟正在由 NTP 或类似的东西更新,那么时间可能会偶尔有效地倒退 - 取决于时钟偏差的处理方式。(有些系统只是将系统时钟放慢一段时间以使其回归现实;其他系统可能存在不连续性。)

我不确定避免这种情况的最佳方法 - 我不相信JRE 目前有任何与Stopwatch.NET 等效的东西,这纯粹是为了测量间隔并且(我相信)不会被系统时钟弄乱变化。

(顺便说一句,我同意 Erick 对Joda Time的推荐——尽管我认为你不需要它来解决这个特殊问题。)

于 2010-07-27T13:01:04.390 回答