Converting LocalDate to GregorianCalendar in Java
Asked Answered
N

2

7

I want to convert LocalDate to GregorianCalendar. Please advice.

In my application we are using GregorianCalendar to work with date's. But I got a Joda LocalDate as a return type when I called one of the webservice. Now I want to convert that LocalDate to GregorianCalendar as it's differing with the month value display. Please see the sample code below.

LocalDate displays 10 for the month October whereas GregorianCalendar display 9 for the month October as it starts from index 0. Please suggest how to convert LocalDate to GregorianCalendar, I tried to see API methods but with no luck.

import java.util.GregorianCalendar;
import org.joda.time.DateTime;
import org.joda.time.LocalDate;

// Sample code below
LocalDate localDateObj = new LocalDate();
System.out.println("Month value using LocalDate :" + localDateObj.getMonthOfYear());
System.out.println("Date using LocalDate : " + localDateObj);

// Converting LocalDate to DateTime
DateTime dateTimeObj = localDateObj.toDateTimeAtStartOfDay();
System.out.println("DateTime month " + dateTimeObj.getMonthOfYear());
System.out.println("Date using DateTime : " + dateTimeObj);

// GregorianCalendar
GregorianCalendar gc = new GregorianCalendar();
System.out.println("Month value using GregorianCalendar:" + gc.OCTOBER);
System.out.println("GC :" + gc.getTime());

Output:

Month value using LocalDate :10
Date using LocalDate : 2016-10-13
DateTime month 10
Date using DateTime : 2016-10-13T00:00:00.000-04:00
Month value using GregorianCalendar:9
GC :Thu Oct 13 16:14:43 EDT 2016
Nunnally answered 13/10, 2016 at 20:23 Comment(8)
Can you use gregorianCalendar.setDate(localDate.toDate())?Planetarium
@msandiford - GregorianCalendar does not have setDate(..) method, cannot do thatNunnally
My apologies, typo at the last minute. I meant gregorianCalendar.setTime(localDate.toDate()). Despite the name, this actually sets the date as well.Planetarium
@msandiford - LocalDate doesn't have toDate() method..facing hard time to solve this issue..Nunnally
OK, well I'm using Joda Time 2.7, and the documentation tells me that the toDate() method has been available since version 2.0. I presume you must be using an older version. Which version?Planetarium
@msandiford - joda-time1.6.jar is the jar I'm using. I tried using gregorianCalendar.setTime(jodaLocalDateObj.toDate()) and its showing error - The method toDate() is not undefined for the type LocalDate.Nunnally
OK, then can you use gregorianCalendar.setTimeInMillis(dateTime.getMillis())? Note the change to using DateTime rather than LocalDate - I think this should work in Joda Time 1.6.Planetarium
Possible duplicate of Convert between LocalDate and XMLGregorianCalendarSidecar
C
22

Try this example to convert LocalDate to GregorianCalendar

LocalDate localDateObj = LocalDate.now();
GregorianCalendar gc = GregorianCalendar.from(localDateObj.atStartOfDay(ZoneId.systemDefault()));

Note: gc.OCTOBER is set to 9 but it is indicating the tenth month of the year in the Gregorian and Julian calendars.

Hope this help!

Chelseychelsie answered 14/10, 2016 at 1:31 Comment(1)
I am using java5, ZoneId class does not support. Please suggest the same when using java5. Thanks.Nunnally
C
3

Either you can map date manually:

LocalDate date = LocalDate.now();
GregorianCalendar gc = new GregorianCalendar.Builder()
.setDate(date.getYear(), date.getMonthOfYear(), date.getDayOfMonth())
.build();
Cindiecindra answered 12/11, 2019 at 9:15 Comment(2)
Note that you'll need to cast it as build() returns a Calendar typeFeil
In addition to @Feil 's comment, it is also worth noticing that the above example is using LocalDate from the Joda-Time library, i.e. not the Java's own Date and Time library, which also have LocalDate class. The method getMonthOfYear() is only present in Joda-Time, in the Java's own equivalent it would be getMonthValue().Ironsides

© 2022 - 2024 — McMap. All rights reserved.