我在Java应用程序中计算各种事务。在事务开始时,我通过实例化日历然后获取小时,分钟,秒和毫秒来获得开始时间。我完成了事务,实例化了一个新日历并得到了一个新的小时,分钟,秒和毫秒。我的理由是,开始时间和结束时间之间的差异是交易的时间。这似乎在大多数时间都有效,但只有一小部分时间,结束时间早于开始时间。为什么会发生这种情况?如何防止它?
答案 0 :(得分:8)
嗯,首先,计算差异的一种简单方法是使用System.currentTimeMillis()
或System.nanoTime()
之类的东西 - 这样你除了简单的减法之外不需要做任何事情。获取开始和结束之间的毫秒数或纳秒数。
但是,如果您的系统时钟正在通过NTP或类似的更新,那么时间可能会偶尔有效地倒退 - 这取决于时钟偏差的处理方式。 (有些系统只是将系统时钟放慢一段时间以使其恢复现实;其他系统可能会出现不连续性。)
我不确定避免这种情况的最佳方法 - 我不相信 JRE目前在.NET中具有等同于Stopwatch
的任何内容,这纯粹是为了测量间隔并且(我相信)不会因系统时钟变化而搞砸。
(我同意Erick对Joda Time的建议,顺便说一下 - 虽然我觉得你不需要这个特殊问题。)