Какую версию Java вы используете и на какой ОС? Вам действительно нужно хранить даты в годах 0 и 9999, или вы просто используете их как значения «отрицательная бесконечность» и «положительная бесконечность»? Как именно вы видите, что календарь является юлианским календарем?
Я пробовал это:
Calendar cal = Calendar.getInstance();
cal.set(0, Calendar.JANUARY, 1);
Date d1 = cal.getTime();
cal.set(9999, Calendar.DECEMBER, 31);
Date d2 = cal.getTime();
System.out.println(d1);
System.out.println(d2);
Вывод (в Windows XP с использованием Sun Java 1.6.0_16):
Thu Jan 01 09:53:56 CET 1 java.util.Date
Tue Dec 31 09:53:56 CET 9999 java.util.Date
Изменяет год 0 на год 1. Изменение кода для использования второго объекта Календаря для второй даты:
Calendar cal = Calendar.getInstance();
cal.set(0, Calendar.JANUARY, 1);
Date d1 = cal.getTime();
Calendar cal2 = Calendar.getInstance();
cal2.set(9999, Calendar.DECEMBER, 31);
Date d2 = cal2.getTime();
System.out.println(d1);
System.out.println(d2);
Это ничего не меняет в выводе или содержимом двух Date
объектов.
Примечание. Помните, что целочисленные литералы, начинающиеся с 0, такие как 0000
в вашем коде, будут интерпретироваться компилятором Java как восьмеричные числа. Это не имеет значения в этом случае, потому что число равно 0, но вы не должны ставить перед целыми литералами нули, если вы не подразумеваете их как восьмеричные числа.