Почему 1942/4/3 00:00:00 является недопустимой датой в java.util.Calendar? - PullRequest
4 голосов
/ 16 июня 2010

Есть что-то особенное в дате 3 апреля 1942 года?По какой-то причине час 0 (12:00) является недопустимым для этой конкретной даты.Дата принимается, когда используется снисходительный календарь, но время суток увеличивается до 1 (1:00 утра).

Соответствующий код

java.util.Calendar calendar = java.util.Calendar.getInstance(
     java.util.TimeZone.getTimeZone("Europe/Helsinki")
);
calendar.clear();
calendar.setLenient(false);
calendar.set(1942, 3, 3, 0, 0, 0);
calendar.getTimeInMillis();

Исключение

java.lang.IllegalArgumentException: HOUR_OF_DAY
 at java.util.GregorianCalendar.computeTime(Unknown Source)
 at java.util.Calendar.updateTime(Unknown Source)
 at java.util.Calendar.getTimeInMillis(Unknown Source)

Я бы действительно предпочел, чтобы даты не были мягкими, поскольку я не хочу принимать невозможные даты.1009 *

- правка

Как указано в принятом ответе и во многих комментариях, это действительно относится к переходу на летнее время.3 апреля 1942 года в 00:00 летнее время было проверено в часовом поясе EEST / Хельсинки.В настоящее время летнее время используется с 1981 года, а часы идут с 03:00 вместо 00:00.Это означает, что, например, 28 марта 2010 года 03:00 не существует в java.util.Calendar.

Мне просто нужно создать специальный случай для этой конкретной даты в моем коде.

Ответы [ 2 ]

6 голосов
/ 16 июня 2010

Просто предположение, но связано ли это с переходом на летнее время? Я предполагаю, что это будет зависеть от локализации вашей кодовой базы (для точных дат вступления в силу летнего времени), а также от других факторов.

--- РЕДАКТИРОВАТЬ --- Возможно, нет, так как это была пятница.

3 голосов
/ 16 июня 2010

Часовые пояса и летнее время менялись год от года, и 1942 год является особенно странным в большей части мира - различные части довольно быстро переходили из рук в руки. Некоторые части Азии были стандартизированы по «бирманскому времени», поэтому они были переведены с местного времени.

Ваш профиль говорит, что вы в Финляндии, что не было так сложно. В этой базе данных мирового времени указывается дата и время как потерянные в течение одного часа для обычного перехода на летнее время.

...