Я намагаюся взяти дату та оновити її на основіінший 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 робить форматування.