Установка TimeZone для экземпляра Calendar и при вызове getTime () время не обновляется в зависимости от часового пояса. - PullRequest
0 голосов
/ 08 декабря 2011

Я пытаюсь взять Date и обновить его на основе другого timezome, и я написал этот код ниже. Затем я заметил, что установил новый часовой пояс, который является CST, вызов getHour отражает обновление, но когда getTime (), дата не отражает время, основанное на последнем установленном часовом поясе.

TimeZone zone = TimeZone.getTimeZone(TimeZoneConstants.AmericaNewYork);
    Calendar cal = Calendar.getInstance(TimeZone.getTimeZone(TimeZoneConstants.AmericaNewYork));
    System.out.println(cal.get(Calendar.HOUR_OF_DAY));
    System.out.println(DateHelper.formatDate(cal.getTime(), DateHelper.FORMAT_TIME_LONG));
    Calendar cal2 = Calendar.getInstance();
    TimeZone zone2  = cal2.getTimeZone();
    cal.setTimeZone(zone2);
    System.out.println(cal.get(Calendar.HOUR_OF_DAY));
    System.out.println(DateHelper.formatDate(cal.getTime(), DateHelper.FORMAT_TIME_LONG));

выход

16 3:14:36 ​​CST 15 3:14:36 ​​CST

Отсюда вывод консоли: вы можете видеть, что час обновляется, а объект Date, возвращаемый из getTime (), - нет. Я могу написать метод uitl, чтобы получить то, что я хочу, но мне интересно, почему это происходит по умолчанию? - Дункан Кребс

1 Ответ

1 голос
/ 08 декабря 2011

Вы никогда не меняли время, в терминах сырых миллисекунд, начиная с эпохи.Изменение часового пояса просто меняет представление «человека».15:14 Центральная и 16:14 Восточная одинаковы, когда представлены java.util.Date.Они оба одинаковое количество сырого времени с эпохи.Если вы хотите, чтобы удобочитаемое представление было по восточному времени, вы должны сообщить об этом DateHelper, выполняющему форматирование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...