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?
解决方案
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