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

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

LocalDateTime to Calendar conversion & vice-versa :

Direct conversion from java.time.LocalDateTime to java.util.Calendar isn’t possible and hence convert LocalDateTime 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 LocalDateTime to Calendar :

  • LocalDateTime consists of only Date & Time information but doesn’t have Zone information whereas java.util.Calendar requires all 3 DateTime and Zone informations
    • Calendar = LocalDateTime + Zone information
    • For LocalDateTime to Calendar conversion, Time-Zone information is required
  • Date.from() method accepts Instant as input-argument
    1. Convert LocalDateTime to ZonedDateTime using atZone() method passing ZoneId as argument and then invoke toInstant() method which returns an Instant
    2. Now, pass above converted Instant from LocalDateTime to Date.from() method which will return java.util.Date
    3. For converting java.util.Date to Calendar, get an instance of Calendar using getInstance() method and invoke setTime() method passing above converted Date object as argument
  • Converted Calendar will have,
    1. Date & Time parts are same as that of LocalDateTime
    2. Adding System default Zone information
  • In short, LocalDateTime -> ZonedDateTime -> Instant -> java.util.Date -> Calendar
  • Lets see an example for conversion of LocalDateTime to Calendar in the below illustration

ConvertLocalDateTimeToJavaUtilCalendar.java

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

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Calendar;
import java.util.Date;

public class ConvertLocalDateTimeToJavaUtilCalendar {

	public static void main(String[] args) {

		// 1. get current System Date/time
		LocalDateTime localDateTime = LocalDateTime.now();
		System.out.println("Current System Date/time is :- \n"
				+ localDateTime);


		// 2. get system default zone
		ZoneId zoneId = ZoneId.systemDefault();
		System.out.println("\nDefault System Zone is :- \n"
				+ zoneId);


		// 3. convert LocalDate to java.util.Date
		Date date = Date.from(localDateTime.atZone(zoneId).toInstant());


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

Output:

Current System Date/time is :- 
2022-08-09T17:53:03.340340200

Default System Zone is :- 
Asia/Calcutta

Conversion of LocalDateTime to java.util.Calendar is :- 
Tue Aug 09 17:53:03 IST 2022

2. Convert Calendar to LocalDateTime :

  • Get Calendar object using getInstance() method of Calendar for conversion to LocalDateTime
  • 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 atZone() method passing ZoneId as argument for Instant to ZonedDateTime conversion
    4. And then invoke toLocalDateTime() method which returns LocalDateTime
  • In short, Calendar -> java.util.Date -> Instant -> ZonedDateTime -> LocalDateTime
  • Lets see an example for conversion of Calendar to LocalDateTime in the below illustration

ConvertJavaUtilCalendarToLocalDateTime.java

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

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Calendar;
import java.util.Date;

public class ConvertJavaUtilCalendarToLocalDateTime {

	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
		ZoneId zoneId = ZoneId.systemDefault();
		System.out.println("\nDefault System Zone is :- \n"
				+ zoneId);


		// 3. convert java.util.Calendar -> Date -> Instant -> ZonedDateTime -> LocalDateTime
		Date date = calendar.getTime();
		LocalDateTime localDate = date.toInstant().atZone(zoneId).toLocalDateTime();
		System.out.print("\nConversion of Calendar to LocalDateTime is :- \n"
				+ localDate);
	}
}

Output:

Current Date is :- 
Tue Aug 09 17:55:16 IST 2022

Default System Zone is :- 
Asia/Calcutta

Conversion of Calendar to LocalDateTime is :- 
2022-08-09T17:55:16.717

Related Articles:

References:

Happy Coding !!
Happy Learning !!

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