Java 8 – How to convert OffsetDateTime to ZonedDateTime ?

In this article, we will learn how to convert OffsetDateTime to ZonedDateTime using different methods like toZonedDateTime(), atZoneSameInstant() and atZoneSimilarLocal() methods of OffsetDateTime provided in Java 1.8 version

For ZonedDateTime to an OffsetDateTime conversion, read Java 8 – How to convert ZonedDateTime to an OffsetDateTime ?

Convert OffsetDateTime to ZonedDateTime :

  • There are different methods available in OffsetDateTime for converting into ZonedDateTime for different purposes as listed below,
    1. toZonedDateTime() – Converts invoking OffsetDateTime to a ZonedDateTime using the offset as the zone ID
    2. atZoneSameInstant(ZoneId) – Combines invoking OffsetDateTime with a time-zone to create a ZonedDateTime ensuring that the result has the same instant
    3. atZoneSimilarLocal(ZoneId) – Combines invoking OffsetDateTime with a time-zone to create a ZonedDateTime trying to keep the same local date and time
  • Using these methods, it is very easy to convert OffsetDateTime to ZonedDateTime
  • After conversion, ZonedDateTime have Date & Time parts same as that of OffsetDateTime and additionally provided ZoneId
  • Lets see an example for conversion of OffsetDateTime to ZonedDateTime in the below illustration

ConvertOffsetDateTimeToZonedDateTime.java

package in.bench.resources.java8.offsetdatetime.examples;

import java.time.OffsetDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;

public class ConvertOffsetDateTimeToZonedDateTime {

	public static void main(String[] args) {

		// 1. get Offset Date/time
		OffsetDateTime offsetDateTime = OffsetDateTime.now();
		System.out.println("Offset Date/time is :- \n" 
				+ offsetDateTime);


		// 2. get Offset
		System.out.println("\nOffset is :- \n" 
				+ offsetDateTime.getOffset());


		// 3. get Offset
		System.out.println("\nDefault ZoneId is :- \n" 
				+ ZoneId.systemDefault());


		// 4. convert OffsetDateTime to ZonedDateTime using toZonedDateTime()
		ZonedDateTime zonedDateTime1 = offsetDateTime.toZonedDateTime();
		System.out.println("\n1. Conversion of OffsetDateTime to ZonedDateTime"
				+ " using toZonedDateTime() is :- \n"
				+ zonedDateTime1);


		// 5. different zone - Europe/Paris
		ZoneId zoneId = ZoneId.of("Europe/Paris");


		// 6. convert OffsetDateTime to ZonedDateTime using atZoneSameInstant(ZoneId)
		ZonedDateTime zonedDateTime2 = offsetDateTime.atZoneSameInstant(zoneId);
		System.out.println("\n2. Conversion of OffsetDateTime to ZonedDateTime"
				+ " using atZoneSameInstant(ZoneId) is :- \n"
				+ zonedDateTime2);


		// 7. convert OffsetDateTime to ZonedDateTime using atZoneSimilarLocal(ZoneId)
		ZonedDateTime zonedDateTime3 = offsetDateTime.atZoneSimilarLocal(zoneId);
		System.out.print("\n3. Conversion of OffsetDateTime to ZonedDateTime"
				+ " using atZoneSimilarLocal(ZoneId) is :- \n"
				+ zonedDateTime3);
	}
}

Output:

Offset Date/time is :- 
2022-08-17T09:07:15.247711600+05:30

Offset is :- 
+05:30

Default ZoneId is :- 
Asia/Calcutta

1. Conversion of OffsetDateTime to ZonedDateTime using toZonedDateTime() is :- 
2022-08-17T09:07:15.247711600+05:30

2. Conversion of OffsetDateTime to ZonedDateTime using atZoneSameInstant(ZoneId) is :- 
2022-08-17T05:37:15.247711600+02:00[Europe/Paris]

3. Conversion of OffsetDateTime to ZonedDateTime using atZoneSimilarLocal(ZoneId) is :- 
2022-08-17T09:07:15.247711600+02:00[Europe/Paris]

Related Articles:

References:

Happy Coding !!
Happy Learning !!

Java 8 – How to convert OffsetDateTime to an Instant ?
Java 8 – How to convert OffsetDateTime to LocalDateTime ?