如何在Java.time中将LocalDateTime的精度设置为纳秒?

时间:2016-08-11 20:49:13

标签: java java-8 java-time

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

像这样:

2016-08-11T22:17:35.031

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

2 个答案:

答案 0 :(得分:6)

我假设你刚刚使用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创建LocalDateTime.of()以验证是否存储纳秒,并将其包含在默认LocalDateTime.toString()的返回值中方法:

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

System.out.println(when);

以上的输出将是:

2016-08-12T09:38:12.123456789

答案 1 :(得分:0)

使用LocaleDateTime.now().getNano()

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