为什么新的 Java 8 Date Time API 没有纳秒精度? [复制]

2023-12-05

Java 8 中新的 Date Time API 的功能之一应该是纳秒精度。但是,当我像这样将当前日期时间打印到控制台时

DateTimeFormatter formatter = DateTimeFormatter
    .ofPattern("yyyy-MM-dd'T'HH:mm:ss,nnnnnnnnnZ");
System.out.println(OffsetDateTime.now().format(formatter)); 

我只看到毫秒精度:2015-11-02T12:33:26,746000000+0100

该操作系统似乎确实支持纳秒精度。当我通过终端打印当前日期时间时

date -Ins

我看到 2015-11-02T12:33:26,746134417+0100

如何在 Java 中获得纳秒精度?我在 Ubuntu 14.04 64 位上运行 Oracle Java 1.8.0_66


The java.timeAPI 一般does具有纳秒级精度。例如:

DateTimeFormatter formatter = DateTimeFormatter
    .ofPattern("yyyy-MM-dd'T'HH:mm:ss,nnnnnnnnnZ");
OffsetDateTime odt = OffsetDateTime.of(2015, 11, 2, 12, 38, 0, 123456789, ZoneOffset.UTC);
System.out.println(odt.format(formatter));

Output:

2015-11-02T12:38:00,123456789+0000

然而,它是返回的时钟值OffsetDateTime.now()它返回一个只有毫秒的值。

From ClockJava 8 中的实现:

这里提供的时钟实现基于System.currentTimeMillis()。该方法对时钟的准确性几乎没有保证。需要更准确时钟的应用程序必须使用不同的外部时钟(例如 NTP 服务器)自行实现此抽象类。

所以这里没有什么本质上不精确的 - 只是默认实现Clock using System.currentTimeMillis()。您可以创建自己的更精确的子类。但是,您应该注意,增加精度而不增加更多accuracy可能不是很有用。 (诚​​然,有时可能是这样......)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么新的 Java 8 Date Time API 没有纳秒精度? [复制] 的相关文章

随机推荐