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

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

喜欢这个:

 2016-08-11T22:17:35.031 

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

我假设你只是使用LocalDateTime.toString() ,在这种情况下文档读取:

使用的格式将是最短的,输出省略的部分隐含为零的时间的完整值。

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

 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSSSSSSS"); System.out.println(LocalDateTime.now().format(formatter)); 

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

更新 – 您还可以使用LocalDateTime.of()创建LocalDateTime以validation是否存储了纳秒,并将包含在默认LocalDateTime.toString()方法的返回值中:

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

以上的输出将是:

 2016-08-12T09:38:12.123456789

使用LocaleDateTime.now().getNano()

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