Java中的单调递增时间?
在Java应用程序中,我希望能够在操作开始时获取时间戳,并能够定期检查操作运行了多长时间。问题是:我不想受到网络时间协议的影响,不想让时钟移动,不想让管理员改变时间,也不想受到任何可能突然调整一天时间的事情的影响。我想要一个单调递增的时间值。我认为这排除了java.util.Date、Time和Calendar JRE中是否存在单调递增时间戳的来源?您是否考虑过使用 它仅在计算两个事件之间的运行时间时才有意义。由于文档说明它与任何系统或墙时间无关,因此我相信它可以用于您的场景。有一个类可以做到这一点。它被称为 它们没有年表或时区,仅由毫秒持续时间组成Java中的单调递增时间?,java,time,Java,Time,在Java应用程序中,我希望能够在操作开始时获取时间戳,并能够定期检查操作运行了多长时间。问题是:我不想受到网络时间协议的影响,不想让时钟移动,不想让管理员改变时间,也不想受到任何可能突然调整一天时间的事情的影响。我想要一个单调递增的时间值。我认为这排除了java.util.Date、Time和Calendar JRE中是否存在单调递增时间戳的来源?您是否考虑过使用 它仅在计算两个事件之间的运行时间时才有意义。由于文档说明它与任何系统或墙时间无关,因此我相信它可以用于您的场景。有一个类可以做到这
您还可以将日期戳设置为格林威治时间,网络时间协议不应成为问题。返回最精确的可用系统计时器的当前值,单位为纳秒。是的,这是事实,bat AFAIK nanoTime不受系统时间的影响,这是提问者所要求的。是的,尝试过。它工作起来很有魅力。System.currentTimeMillis()受重置系统时间的影响,但不受纳米时间的影响。我的粗心。来自JavaDoc:无法保证值的更改频率。这是值得关注的吗?@hhafez
nanoTime()
对于在虚拟机内运行的进程来说并不一定是单调的:。这个答案也是相关的:我考虑过JadoTime,但我认为当nanoTime可用时,它会被过度使用。