Я написал приложение Java, в котором я начинаю дату с 1 января 00:00 определенного года. Затем я увеличиваю день 355 раз и распечатываю результаты по пути. Я пытался понять, как временные часы работают с летним временем, и если добавление 1 дня сдвинет время с полуночи до 1 часа при переходе на летнее время. Мой код выглядит следующим образом:Добавление дней в часовом поясе Java Восточноевропейское летнее время (EEST)
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
Когда я использую часовой пояс, отслеживающего Восточной Европы летнее время, (в данном случае, я выбрал часовой пояс Africa/Cairo) Я получаю выход:
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
Я запутался, почему они timezones ведут себя по-разному, и если это ошибка с часовым поясом Африки/Каира, или если я не понимаю, как работают часы ...
Любое понимание этого состояния d оценить.
какой версии java вы используете? Вы обновили свою базу данных времени JRE с последним? – kosa
Я использую java 6 update 29 ... обновление до 30 сейчас ... –