import java.time.LocalDate; import java.time.Month; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.HashMap; import java.util.Map; import java.util.SortedSet; import java.util.TimeZone; import java.util.TreeSet; public class JulianBug1 { public static void main(String[] args) { LocalDate expected = LocalDate.of(200, Month.MARCH, 1); Map> results = new HashMap<>(); for (String tz : TimeZone.getAvailableIDs()) { TimeZone.setDefault(TimeZone.getTimeZone(tz)); LocalDate actual = ofJulian(200, Month.MARCH, 1); results.computeIfAbsent(actual.equals(expected), k -> new TreeSet()).add(tz); } results.forEach((k, v) -> System.out.format("%s - %s%n", k, v)); } 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(); } }