Я написал приложение на Java, в котором я начинаю дату с 1 января 00:00 определенного года. Затем я увеличиваю день в 355 раз и распечатываю результаты по пути. Я пытался понять, как часовые пояса работают в летнее время, и если при добавлении 1 дня время переместится с полуночи на 1 час ночи при переходе на летнее время. Мой код выглядит так:
TimeZone tz = TimeZone.getDefault();
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss z");
sdf.setTimeZone(tz);
Calendar cal = Calendar.getInstance(tz);
cal.set(2008, 0, 1, 0, 0, 0);
cal.set(Calendar.MILLISECOND, 0);
for ( int i = 0; i < 355; i++ ) {
System.out.println(sdf.format(cal.getTime()));
cal.add(Calendar.DAY_OF_MONTH, 1);
}
При работе в моем часовом поясе по умолчанию (восток США) выходные данные выглядят так, как я ожидал:
01/01/2008 00:00:00 EST
01/02/2008 00:00:00 EST
01/03/2008 00:00:00 EST
01/04/2008 00:00:00 EST
...
и когда я перехожу на летнее время, я получаю
03/10/2008 00:00:00 EDT
03/11/2008 00:00:00 EDT
03/12/2008 00:00:00 EDT
Когда я использую часовой пояс, который соблюдает восточноевропейское летнее время (в данном случае я выбрал часовой пояс Африка / Каир), я получаю вывод:
01/01/2008 00:00:00 EET
01/02/2008 00:00:00 EET
01/03/2008 00:00:00 EET
01/04/2008 00:00:00 EET
01/05/2008 00:00:00 EET
но когда я перехожу в восточноевропейское летнее время, я получаю:
04/25/2008 01:00:00 EEST
04/26/2008 01:00:00 EEST
04/27/2008 01:00:00 EEST
И странно, когда EEST заканчивается, я все еще получаю
08/29/2008 01:00:00 EET
08/30/2008 01:00:00 EET
Меня смущает, почему эти часовые пояса ведут себя по-разному, и если это ошибка с часовым поясом Африка / Каир, или я неправильно понимаю, как работают часовые пояса ...
Любое понимание этого будет оценено.