При парсинге xml файла наткнулся на следующую проблему. Даты ранее 1582 года содержащиеся в XMLGregorianCalendar некорректно конвертируются в GregorianCalendar.

XMLGregorianCalendar beforeDate = DatatypeFactory.newInstance().newXMLGregorianCalendar();
beforeDate.setDay(11);
beforeDate.setMonth(11);
beforeDate.setYear(1581);
XMLGregorianCalendar alterDate = DatatypeFactory.newInstance().newXMLGregorianCalendar();
alterDate.setYear(1582);
alterDate.setMonth(11);
alterDate.setDay(11);

SimpleDateFormat dateFormat = new SimpleDateFormat("dd:MMM:yyyy");
 System.out.println(dateFormat.format(beforeDate.toGregorianCalendar().getTime()));

System.out.println(dateFormat.format(alterDate.toGregorianCalendar().getTime()));

Вывод:

01:Jan:1581
11:Jan:1582

Это происходит из-за перехода с Юлианского календаря на Грегорианский. Чтобы того не было, необходимо явно выставить дату.

GregorianCalendar calendar = new GregorianCalendar();
calendar.clear();
calendar.set(xmlCalendar.getYear(), xmlCalendar.getMonth() - 1, xmlCalendar.getDay());

SimpleDateFormat dateFormat = new SimpleDateFormat("dd:MMM:yyyy");
System.out.println(dateFormat.format(calendar.getTime()));

Вывод:

11:Jan:1580