首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在java.time.Instant中计算纳秒?

如何在java.time.Instant中计算纳秒?
EN

Stack Overflow用户
提问于 2020-02-28 00:44:38
回答 2查看 856关注 0票数 0

java.time.Instant上的Java 8文档状态:

瞬间的范围需要存储一个大于长的数字。为了达到这个目的,类存储一个长的表示时间的秒和一个表示纳秒的int,这个值总是在0到999,999之间。

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

请注意,虽然返回值的时间单位是毫秒,但该值的准确性取决于底层操作系统,而且可能更大。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-28 01:17:31

Instant类只是保证纳秒精度(即nanos的值将以纳秒为单位提供)。它不保证纳秒精度(即该值可能不能准确地表示当前的纳秒数)。

一个简单的乘法器(由特定的SystemClock类实例指定)是将可以获得的任何单元转换为纳秒所需的全部。

其他要点:

您链接的System.currentTimeMillis方法的文档并没有说“充其量”,它只是承诺尽它所能做得更好。

其次,通过(例如) Instant.now()中的堆栈跟踪,可以看到该方法的实现。在我的机器的java 8设置(Mac,JDK1.8.0.241)上,这回到了使用SystemClock类,它最终使用了System.currentTimeMillis()Instant.ofEpochMillis。在这种方法中,您可以看到它只是将'epoch‘乘以1_000_000

然而,在java的后期版本中,这种情况已经发生了变化。

票数 3
EN

Stack Overflow用户

发布于 2020-02-28 00:49:27

Java使用Clock类获取当前即时信息。Clock.systemUTC()返回最佳可用的系统时钟实例,可以返回更精确的时间戳。

也就是说,Windows上的Java 8使用System.currentTimeMillis()作为源,因此它返回毫秒精确的时间。但这并不能保证,其他实现可以提供更精确的时间。

还请注意,Instant不一定是通过Instant.now()调用获得的。您可以从输入数据中解析它,例如,纳秒精度可能很有用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60443791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档