При парсинге 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()));
Output:
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()));
Output:
11:Jan:1580