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
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With