import java.time.LocalDate; import java.time.Month; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; public class JulianBug { public static void main(String[] args) { System.out.println(ofJulian(200, Month.MARCH, 1) + " must be 0200-03-01"); System.out.println(ofJulian(1899, Month.DECEMBER, 20) + " must be 1900-01-01"); System.out.println(ofJulian(1899, Month.DECEMBER, 21) + " must be 1900-01-02"); } public static LocalDate ofJulian(int year, Month month, int dayOfMonth) { GregorianCalendar julianCalendar = new GregorianCalendar(); julianCalendar.setGregorianChange(new Date(Long.MAX_VALUE)); julianCalendar.clear(); julianCalendar.set(Calendar.ERA, GregorianCalendar.AD); julianCalendar.set(year, month.getValue() - 1, dayOfMonth); return julianCalendar.toZonedDateTime().toLocalDate(); } }