Java 8 – How to convert OffsetDateTime to Calendar and vice-versa ?

In this article, we will learn how to convert OffsetDateTime to Calendar using toInstant() method of OffsetDateTime provided in Java 1.8 version and vice-versa

OffsetDateTime to Calendar conversion & vice-versa :

Direct conversion from OffsetDateTime to java.util.Calendar isn’t possible and hence convert OffsetDateTime to java.util.Date and then to Calendar using getInstance() & setTime() methods

  • There are 2 new methods introduced in Java 1.8 version for Date class, those are
    1. from(Instant) – This static method obtains an instance of Date from an Instant object
    2. toInstant() – This method converts invoking Date object to an Instant
  • Note: Many legacy methods of Date class are deprecated

1. Convert OffsetDateTime to Calendar :

  • Converting OffsetDateTime to Calendar is very straightforward as,
    • OffsetDateTime class has toInstant() method
    • Date.from() method accepts Instant as input-argument and returns java.util.Date
    • For converting java.util.Date to Calendar, get an instance of Calendar using getInstance() method and then invoke setTime() method passing above converted Date object as argument
  • Converted Calendar will have,
    1. Date & Time & Zone/Offset parts remain same as that of OffsetDateTime
  • In short, OffsetDateTime -> Instant -> java.util.Date -> Calendar
  • Lets see an example for conversion of OffsetDateTime to Calendar in the below illustration

ConvertOffsetDateTimeToJavaUtilCalendar.java

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

import java.time.OffsetDateTime;
import java.util.Calendar;
import java.util.Date;

public class ConvertOffsetDateTimeToJavaUtilCalendar {

	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. convert OffsetDateTime to java.util.Date
		Date date = Date.from(offsetDateTime.toInstant());


		// 3. convert java.util.Date to java.util.Calendar
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		System.out.print("\nConversion of OffsetDateTime to java.util.Calendar is :- \n"
				+ date);
	}
}

Output:

Offset Date/time is :- 
2022-08-17T13:25:15.100541100+05:30

Conversion of OffsetDateTime to java.util.Calendar is :- 
Wed Aug 17 13:25:15 IST 2022

2. Convert Calendar to OffsetDateTime :

  • Get Calendar object using getInstance() method of Calendar for conversion to OffsetDateTime
  • Conversion steps
    1. Convert Calendar to Date using getTime() method
    2. And then invoke toInstant() method for Date to Instant conversion
    3. And then invoke atOffset() method passing ZoneOffset as argument for Instant to OffsetDateTime conversion
  • In short, Calendar -> java.util.Date -> Instant -> OffsetDateTime
  • Lets see an example for conversion of Calendar to OffsetDateTime in the below illustration

ConvertJavaUtilCalendarToOffsetDateTime.java

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

import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.util.Calendar;
import java.util.Date;

public class ConvertJavaUtilCalendarToOffsetDateTime {

	public static void main(String[] args) {

		// 1. get current Calendar/Date
		Calendar calendar = Calendar.getInstance();
		System.out.println("Current Date is :- \n" 
				+ calendar.getTime());


		// 2. get system default zone
		ZoneOffset zoneOffset = ZoneOffset.of("+05:30");
		System.out.println("\nZoneOffset is :- \n" 
				+ zoneOffset);


		// 3. convert java.util.Calendar -> Date -> Instant -> OffsetDateTime
		Date date = calendar.getTime();
		OffsetDateTime localDate = date.toInstant().atOffset(zoneOffset);
		System.out.print("\nConversion of Calendar to an OffsetDateTime is :- \n"
				+ localDate);
	}
}

Output:

Current Date is :- 
Wed Aug 17 13:26:34 IST 2022

ZoneOffset is :- 
+05:30

Conversion of Calendar to an OffsetDateTime is :- 
2022-08-17T13:26:34.813+05:30

Related Articles:

References:

Happy Coding !!
Happy Learning !!

Java 8 – How to convert OffsetDateTime to GregorianCalendar and vice-versa ?
Java 8 – How to convert OffsetDateTime to java.sql.Timestamp and vice-versa ?