Excerpt from XMLGregorianCalendar.toGregorianCalendar()JavaDoc on how they instantiate GregorianCalendar:
Get a clean Gregorian calendar by calling GregorianCalendar.setGregorianChange (new date (Long.MIN_VALUE)).
This means that the created calendar will be prolific and will not switch to the Julian calendar, as is done by default for old dates. Then the problem is here:
argCal.toGregorianCalendar() - XMLGregorianCalendar GregorianCalendar ( - . )cal.setTime(calendarDate.getTime());
:
. , Java Date Calendar API ( ) . Java 8 JSR-310 ( JodaTime ).
, ( ) :
- , java.util.Date. . , . , . ... , , , . , , 0 10 . gregorian calendar - .
XMLGregorianCalendar vs GregorianCalendar:
- XML , , , gregorian.
- Java GregorianCalendar "", ,
- XMLGregorianCalendar GregorianCalendar , (. JavaDoc ).
:
, GregorianCalendar , - , 3 . , 3 , - , ? , , ! . , :) [JSR-310 ].
, gregorian (.. gregorian ), :
Calendar calendar = Calendar.getInstance();
((GregorianCalendar) calendar).setGregorianChange(new Date(Long.MIN_VALUE));
: calendar.getTime() . , , java.util.Date.toString() ( System.out.println) Calendar, . ? , ( , :))?
2
XMLGregorianCalendar xmlCalendar = DatatypeFactory.newInstance().newXMLGregorianCalendar();
xmlCalendar.setYear(1);
xmlCalendar.setMonth(1);
xmlCalendar.setDay(1);
Calendar calendar = xmlCalendar.toGregorianCalendar();
Calendar result = Calendar.getInstance();
result.setTimeZone(calendar.getTimeZone());
result.set(Calendar.YEAR, calendar.get(Calendar.YEAR));
result.set(Calendar.MONTH, calendar.get(Calendar.MONTH));
result.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH));
result.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY));
result.set(Calendar.MINUTE, calendar.get(Calendar.MINUTE));
result.set(Calendar.SECOND, calendar.get(Calendar.SECOND));
result.set(Calendar.MILLISECOND, calendar.get(Calendar.MILLISECOND));
System.out.println(result.getTime());
Disclamer: ( - , XML), OP (. ).