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.time
API 一般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(使用前将#替换为@)