Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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?

like image 720
Steven Hu Avatar asked Dec 05 '22 17:12

Steven Hu


2 Answers

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
like image 184
Sean Bright Avatar answered Dec 09 '22 14:12

Sean Bright


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.

like image 45
Bilal BBB Avatar answered Dec 09 '22 13:12

Bilal BBB