/ / Встановлення TimeZone на приклад календаря та під час виклику getTime () час не оновлюється на основі часового поясу - Java, дата, календар

Налаштування TimeZone на екземплярі календаря та під час виклику getTime () час не оновлюється на основі часового поясу - java, date, calendar

Я намагаюся взяти дату та оновити її на основіінший 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 15:14:36 ​​CST 15 15:14:36 ​​CST

Звідси вихід консолі нижче, як можнадив. година оновлюється, але об’єкт Date, повернутий з getTime (), не є. Я можу написати метод uitl, щоб отримати те, що я хочу, але мені цікаво, чому це відбувається через дефолт? - Дункан Кребс

Відповіді:

1 для відповіді № 1

Ви ніколи не змінювали час, з точки зору сирогомілісекунд з епохи, взагалі. Зміна часового поясу просто змінює «людське» уявлення. 15:14 Центральний та 16:14 східний точно такі ж, коли представлені а java.util.Date. Вони "одночасно мають однакову кількість часу, що минуло з епохи. Якщо ви хочете, щоб людське читабельне представлення було у східний час, вам потрібно сказати, що DataHelper робить форматування.