Java GregorianCalendar Часовой пояс
У меня странная проблема с Java-григорианским календарем:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:S Z");
sdf.setTimeZone(TimeZone.getTimeZone("US/Pacific"));
GregorianCalendar cal1 = new GregorianCalendar(TimeZone.getTimeZone("US/Pacific"));
cal1.setTimeInMillis(1320566400000L);
GregorianCalendar cal2 = new GregorianCalendar(TimeZone.getTimeZone("US/Pacific"));
cal2.setTimeInMillis(1320570000000L);
System.out.println(sdf.format(cal1.getTime()));
System.out.println(sdf.format(cal2.getTime()));
Я выполнил приведенный выше код на машине с часовым поясом по умолчанию = US Pacific, но машина работает в Германии.
Результат следующий:
2011-11-06 01:00:00:0 -0700
2011-11-06 01:00:00:0 -0800
Я действительно не понимаю, почему в результате есть другой часовой пояс... Я также проверил код на другой машине (по умолчанию Timezone = GMT), и он работает правильно.
У кого-нибудь есть идея, почему возникает эта проблема?
Лучший, Майкл
4 ответа
Добавьте эти строки в вашу программу:
for (int i=0; i<24; i++) {
cal1.add(Calendar.MINUTE, i*5);
System.out.println(" : " + sdf.format(cal1.getTime()));
}
И вы увидите:
: 2011-11-06 01:00:00:0 -0700
: 2011-11-06 01:05:00:0 -0700
: 2011-11-06 01:15:00:0 -0700
: 2011-11-06 01:30:00:0 -0700
: 2011-11-06 01:50:00:0 -0700
: 2011-11-06 01:15:00:0 -0800
: 2011-11-06 01:45:00:0 -0800
: 2011-11-06 02:20:00:0 -0800
: 2011-11-06 03:00:00:0 -0800
Кажется, вы меняете летнее время на зимнее. Мой часовой пояс CET (UTC+01:00), поэтому я не могу сказать, почему он работает на вашем втором компьютере.
6 ноября 2011 года в США закончилось летнее время. Итак, вы видите, что часы пробили 2 часа ночи 6 ноября, а затем они возвращаются к 1 часу ночи, чтобы откатиться на час к стандартному времени. Таким образом, смещение также изменяется от -7 до -8 от GMT, по-моему, по тихоокеанскому времени. Так что это работает правильно из того, что я вижу.
Я бы посоветовал вам использовать григорианскую хронологию в Joda-Time
Пожалуйста, проверьте в своей панели управления, что вы не активировали летнее время. Эта ошибка может быть из-за этого