gpt4 book ai didi

java - java.time.Instant 中纳秒是如何计算的?

转载 作者:行者123 更新时间:2023-12-01 17:41:34 25 4
gpt4 key购买 nike

Java 8 docs on java.time.Instant状态:

The range of an instant requires the storage of a number larger than a long. To achieve this, the class stores a long representing epoch-seconds and an int representing nanosecond-of-second, which will always be between 0 and 999,999,999.

根据 System.currentTimeMillis() documentation ,Java 8 时钟最多只能保证毫秒分辨率:

Note that while the unit of time of the return value is a millisecond, the accuracy of the value depends on the underlying operating system and may be larger

如果 Java 8 最多只能保证毫秒精度,那么 Java 如何计算 java.time.Instant 纳秒级值?

最佳答案

Instant 类仅 promise 纳秒精度(即nanos 的值将以纳秒为单位提供) 。它 promise 纳秒精度(即该值可能无法准确表示当前的纳秒数)。

只需一个简单的乘数(由所使用的特定 SystemClock 类实例指定)即可将可以获得的任何单位转换为纳秒。

<小时/>

其他要点:

您链接的System.currentTimeMillis方法的文档没有说“最多”;它只是 promise 会尽力而为。

其次,您可以通过跟踪(例如)Instant.now() 中的堆栈跟踪来查看该方法的实现。在我机器的 java 8 设置(Mac OS,JDK 1.8.0.241)上,这会回退到使用 SystemClock 类,该类最终使用 System.currentTimeMillis() Instant.ofEpochMillis。在方法中,您可以看到它只是将“纪元毫秒”乘以1_000_000

然而,这在更高版本的 java 中发生了变化。

关于java - java.time.Instant 中纳秒是如何计算的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60443791/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com