为什么新的Java 8日期时间API不具有纳秒精度?

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

回答:

java.timeAPI通常 确实 具有纳秒级的精度。例如:

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));

输出:

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

但是,它OffsetDateTime.now()是返回的时钟值,它返回的值只有毫秒。

ClockJava8的实现中:

此处提供的时钟实现基于System.currentTimeMillis()。该方法几乎不能保证时钟的准确性。需要更精确时钟的应用程序必须使用其他外部时钟(例如NTP服务器)自己实现此抽象类。

因此,这里并没有天生的不精确之处-只是Clockusing

的默认实现System.currentTimeMillis()。您可能会创建自己的更精确的子类。但是,您应该注意,增加精度而不增加 _精度_可能并不是非常有用。(诚​​然,有时候可能会这样)

以上是 为什么新的Java 8日期时间API不具有纳秒精度? 的全部内容, 来源链接: utcz.com/qa/426863.html

回到顶部