Convert OffsetDateTime to LocalDateTime
1 CommentLast Updated on August 1, 2020 by jt
Java 8 introduced a new date and time API defined inside java.time package. The key date and time classes defined in this package are LocalDateTime, LocalDateTime, and OffsetDateTime.
OffsetDateTime represents a date-time with an offset. This class stores all date and time fields, to a precision of nanoseconds, as well as the offset from UTC/Greenwich. For example, the value 2nd December 2018 at 15:35.40.123456789 +03:00 can be stored in an OffsetDateTime.
On the other hand, LocalDateTime represents a date and time without time zone information. An example is 2020-07-12T17:23:10.205580.
In addition to LocalDateTime, you can also use the LocalDate and LocalTime classes to work with date and time without time-zone separately.
An example of LocalDate is 2018-10-05. An example of LocalTime is 15:19:47.459.
In my previous post, I explained how to convert OffsetDateTime to ZonedDateTime.
In this post, I’ll discuss how to convert OffsetDateTime to LocalDateTime, LocalDate, and LocalTime.
Converting OffsetDateTime To LocalDateTime
The code for converting OffsetDateTime to LocalDateTime is this.
public LocalDateTime convertToLocalDateTime() {
OffsetDateTime offsetDateTime = OffsetDateTime.now();
System.out.println(offsetDateTime);
LocalDateTime localDateTime = offsetDateTime.toLocalDateTime();
System.out.println("localDateTime = " + localDateTime);
return localDateTime;
}
In the preceding code, OffsetDateTime.now() gets the current date-time in the default time-zone with an offset. Then offsetDateTime.toLocalDateTime() converts the current date-time LocalDateTime.
Let’s call this method from our main class.
DateConverter dateConvertor = new DateConverterImpl(); dateConvertor.convertToLocalDateTime();
On running the application, the output is this.
2020-07-12T18:51:36.240918
Converting OffsetDateTime To LocalDate
At times, you might want only the local date instead of a full date and time with offset. For that, you need to convert the OffsetDateTime to LocalDate.
The code is this.
public LocalDate convertToLocalDate() {
OffsetDateTime offsetDateTime = OffsetDateTime.now();
System.out.println(offsetDateTime);
LocalDate localDate=offsetDateTime.toLocalDate();
System.out.println(localDate);
return localDate;
}
The output on calling the preceding method is this.
2020-07-12
Converting OffsetDateTime To LocalTime
The OffsetDateTime class also allows conversion to local time.
The code for converting OffsetDateTime to LocalTime is this.
public LocalTime convertToLocalTime() {
OffsetDateTime offsetDateTime = OffsetDateTime.now();
System.out.println(offsetDateTime);
LocalTime localTime=offsetDateTime.toLocalTime();
System.out.println(localTime);
return localTime;
}
The output on calling the preceding method is this.
18:51:36.240918
The source code for this post can be found here on GitHub.

Klaue
This totally ignores time zones as toLocalDateTime of OffsetDateTime just strips time zone information.
If the OffsetTimeZone is GMT and local time zone is GMT+2, 15:19:47 will still be 15:19:47 in LocalDateTime, not 17:19:47, as would be what you’d want most of the time.
It’s more of a cast than a convert.
Instead of offsetDateTime.toLocalDateTime();, use offsetDateTime..atZoneSameInstant(ZoneId.systemDefault()).toLocalDateTime();