【问题标题】:Monotonically increasing time in Java?Java中的单调增加时间?
【发布时间】:2023-03-26 20:13:01
【问题描述】:

在 Java 应用程序中,我希望能够在操作开始时获取时间戳,并能够定期检查操作已经运行了多长时间。问题是:我不想受到网络时间协议移动时钟、管理员更改时间或任何可以突然调整一天中时间的事情的影响。我想要一个单调递增的时间值。我相信这排除了 java.util.Date、Time 和 Calendar。

JRE 中是否存在单调递增时间戳的某些来源?

【问题讨论】:

    标签: java time


    【解决方案1】:

    JodaTime 有一个类可以做到这一点。它被称为Duration

    “它们没有年表或时区,仅包含毫秒持续时间。”

    您也可以将日期戳设置为格林威治时间,网络时间协议应该不是问题。

    【讨论】:

    • 我考虑过 JadoTime,但我认为当 nanoTime 可用时它会过度杀戮。
    【解决方案2】:

    您是否考虑过使用System.nanoTime()

    它仅在计算两个事件之间经过的时间时才有意义。由于文档声明它与任何系统或墙上时间无关,我相信它可以在您的情况下使用。

    【讨论】:

    • 返回最精确的可用系统计时器的当前值,以纳秒为单位。
    • 是的,确实如此,bat AFAIK nanoTime 不受系统时间的影响,这是提问者所要求的。
    • 是的,试过了。它的工作就像魅力。 System.currentTimeMillis() 会受到重置系统时间的影响,但不会影响 nanoTime。我的粗心。
    • 来自 JavaDoc:不保证值更改的频率。这有什么值得担心的吗?
    • @hhafez nanoTime() 对于在虚拟机中运行的进程不一定是单调的:frankkieviet.blogspot.jp/2009/03/…。这个答案也很相关:stackoverflow.com/a/2979239/709537
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-02
    相关资源
    最近更新 更多