当前位置: 首页 > 面试题库 >

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

尚楚
2023-03-14
问题内容

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中获得纳秒级精度?我正在Ubuntu 14.04 64位上运行Oracle Java 1.8.0_66

  • 也许有人能给我举个例子?我在问自己,新的日期和时间API的改进来自哪里。

  • 我需要一些解释为什么这个代码不编译: 错误: 类型Duration中的(TemporalAmount)方法不适用于参数(ChronoUnit) 正如本文所述: public static Duration from(TemporalAmount amount)从时间量中获取持续时间的实例。这将根据指定的金额获得持续时间。TemporalAmount表示一个时间量,可以是基于日期的,也可以是基于时间

  • 问题内容: 我经常遇到对Java Date和其他与日期时间相关的类的负面反馈。作为.NET开发人员,我无法完全理解(不使用它们)它们到底有什么问题。 有人能对此有所启发吗? 问题答案: 类。最好的例子之一就是如何不以任何语言在任何地方做某事。我该从哪里开始? 阅读JavaDoc可能会使人们认为开发人员实际上有了一些好主意。它接着约之间的区别UTC和GMT在长度,尽管两者之间的差别基本上是闰秒(这发

  • 问题内容: 这是我的代码: 是否可以在日期格式中添加毫秒和纳秒? 问题答案: 您可以通过在末尾添加来添加毫秒数,例如格式为。 毫微秒内没有参考。通常用于性能调试,而不用于显示目的。

  • 问题内容: 因此,我刚刚发现MySQL中最令人沮丧的错误。 显然,该字段及其支持功能不支持比秒更高的精度! 所以我正在使用PHP和Doctrine,我真的需要那些微秒(我正在使用属性)。 我发现我可以使用一个字段来存储值。但是学说会增加毫秒吗?我认为它只是将NOW()分配给该字段。我还担心通过代码散布的日期操作功能(在SQL中)会中断。 我还看到了有关编译UDF扩展的内容。这是不可接受的,因为我或