【问题标题】:How to set precision of LocalDateTime to nanoseconds in Java.time?如何在 Java.time 中将 LocalDateTime 的精度设置为纳秒?
【发布时间】:2016-08-11 20:49:12
【问题描述】:

根据java.time documentation,java.time 应该能够以纳秒精度显示 LocalDateTime 或 LocalTime,但是当我运行 LocalDateTime.now() 并打印出来时,它只显示 3 位而不是 9。

像这样:

2016-08-11T22:17:35.031

有没有办法获得更高的精度?

【问题讨论】:

  • 你是如何打印出来的?以及为什么需要更高的精度——计算机时钟可能并不更准确。
  • 我正在使用System.out.println(LocalDateTime.now()) 将其打印出来。我刚开始学习 Java,并且正在尝试一下并被困在这个问题上。

标签: java java-8 java-time


【解决方案1】:

我假设您只是使用LocalDateTime.toString(),在这种情况下the documentation 读取:

所使用的格式将是最短的输出时间的完整值,其中省略的部分被暗示为零。

如果您希望显示其他数字,即使它们是零,您也需要创建一个 DateTimeFormatter 并使用它来代替:

DateTimeFormatter formatter =
    DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSSSSSSS");

System.out.println(LocalDateTime.now().format(formatter));

此外,LocalDateTime.now() 使用系统默认的Clock,它只保证具有毫秒精度,但如果可用,可以使用更高分辨率的时钟。您的平台可能没有可用于 JRE 且分辨率高于毫秒的时钟。

更新 - 您还可以使用LocalDateTime.of() 创建一个LocalDateTime 来验证纳秒是否已存储并将包含在默认LocalDateTime.toString() 方法的返回值中:

LocalDateTime when =
    LocalDateTime.of(2016, Month.AUGUST, 12, 9, 38, 12, 123456789);

System.out.println(when);

上面的输出将是:

2016-08-12T09:38:12.123456789

【讨论】:

    【解决方案2】:

    使用LocaleDateTime.now().getNano()

    你只是在做System.out.println(LocalDateTime.now())。这使用toString() 方法,如果它们为零,则不显示纳秒。

    【讨论】:

      猜你喜欢
      • 2021-01-26
      • 1970-01-01
      • 2019-07-13
      • 2020-02-02
      • 2015-02-27
      • 2014-04-25
      • 2018-02-16
      • 1970-01-01
      相关资源
      最近更新 更多