Я столкнулся с этой проблемой, пытаясь переключиться с XMLGregorianCalendar на java .time.ZonedDateTime, и наша система зависела от 1-го года для представления «минимальной» даты. Ситуация становится очень странной, когда вы начинаете конвертировать даты до юлиано-григорианского перехода. например,
Вот фрагмент кода Javado c, который намекает на то, что в первые годы дела идут немного смешно
GregorianCalendar реализует prolepti c Григорианский и юлианский календари. То есть даты вычисляются путем экстраполяции текущих правил на неопределенное время назад и вперед во времени. В результате GregorianCalendar может использоваться на все годы для получения значимых и последовательных результатов. Однако даты, полученные с использованием GregorianCalendar, исторически точны только с 1 марта 4 года нашей эры, когда были приняты современные правила юлианского календаря. До этой даты правила високосного года применялись нерегулярно, а до 45 B C юлианский календарь даже не существовал.
https://docs.oracle.com/javase/8/docs/api/java/util/GregorianCalendar.html
Если вы откроете источник GregorianCalendar, вы обнаружите еще одну прекрасную «заметку о реализации», которая предлагает еще больше сумасшествия в игре:
* Likewise, with the Julian calendar, we assume a consistent
* 4-year leap year rule, even though the historical pattern of
* leap years is irregular, being every 3 years from 45 BCE
* through 9 BCE, then every 4 years from 8 CE onwards, with no
* leap years in-between. Thus date computations and functions
* such as isLeapYear() are not intended to be historically
* accurate.
Я написал библиотеку преобразования дат, которая, как мне кажется, реализует преобразование между типами дат «ожидаемым» способом: https://github.com/beirtipol/date-converters. Я надеялся, что смогу обеспечить согласованное преобразование между java .util и java .time датами до 1582 года (юлианский-> григорианский сдвиг), но оно не завершено.
Чтобы ответить на часть вашего вопрос, я не уверен, что есть надежный способ сделать это без тестирования каждой даты и часового пояса до 1582 года. Я пытаюсь сделать это и отправлю ответ, если выясню, но впереди долгий путь испытаний!
Вот еще немного информации о радости римско-юлиано-григорианских сдвигов: https://www.timeanddate.com/calendar/julian-calendar.html