How to set precision of LocalDateTime to nanoseconds in Java.time?

怎甘沉沦 提交于 2019-12-01 08:59:15

问题


According to the java.time documentation, java.time should be able to present a LocalDateTime or LocalTime with nanoseconds precision, but when I run LocalDateTime.now() and print out, it only shows 3 digits instead of 9.

Like this:

2016-08-11T22:17:35.031

Is there a way to get a higher precision?


回答1:


I am assuming you are just using LocalDateTime.toString(), in which case the documentation reads:

The format used will be the shortest that outputs the full value of the time where the omitted parts are implied to be zero.

If you want additional digits to show up, even if they are zeroes, you will need to create a DateTimeFormatter and use that instead:

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

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

Further, LocalDateTime.now() uses the system default Clock which is only guaranteed to have millisecond precision, but can use a higher resolution clock if one is available. It's possible that your platform doesn't have a clock that is available to the JRE with a higher resolution than milliseconds.

Update - You can also create a LocalDateTime with LocalDateTime.of() to verify that nanoseconds are stored and will be included in the return value of the default LocalDateTime.toString() method:

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

System.out.println(when);

The output of the above would be:

2016-08-12T09:38:12.123456789



回答2:


Use LocaleDateTime.now().getNano()

You are just doing System.out.println(LocalDateTime.now()). This uses toString() method which doesn't show nanoseconds if they are zero.



来源:https://stackoverflow.com/questions/38905887/how-to-set-precision-of-localdatetime-to-nanoseconds-in-java-time

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!