Java: часовой пояс, почему разные часовые пояса дают одинаковое значение в миллисекундах

У меня есть следующий код, моя цель собирается вернуться GMT+0 время в миллисекундах Но почему я всегда получаю миллисекунд по местному часовому поясу?

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
Calendar cal2 = Calendar.getInstance();
System.out.println("Time zone id is:"+cal.getTimeZone().getID()+";time in millisec:"+cal.getTimeInMillis());
System.out.println("Time zone id is:"+cal2.getTimeZone().getID()+";time in millisec:"+cal2.getTimeInMillis());

Выход
Идентификатор часового пояса:GMT, время в миллисекундах:1332740915154
Идентификатор часового пояса: Европа / Хельсинки, время в миллисекундах:1332740915154

Почему разные часовые пояса дают то же самое значение в миллисекундах?
Я полагаю, если это GMT+0 тогда это должно быть другое значение в миллисекундах относительно местного часового пояса.

3 ответа

Решение

Почему разные часовые пояса дают то же самое значение в миллисекундах?

Потому что это то, что он должен делать. Из документации:

(Возвращает) текущее время в миллисекундах UTC от эпохи.

Другими словами, это значение, которое будет в Date вернулся getTime - это не зависит от часового пояса. Если вы хотите значения, которые зависят от часового пояса, используйте Calendar.Get(Calendar.YEAR) и т.п.

И то и другое Calendar.getTime() а также Calendar.getTimeInMillis() возвращает значения, представляющие момент времени в календаре, который не зависит ни от часового пояса, ни от календарной системы.

millisec объекта Date в Java всего за миллисекунды GMT+0 1970/01/01 00:00:00, Это не зависит от часового пояса. Часовой пояс - это свойство для форматирования даты в удобочитаемую строку.

Метод getTimeInMillis() возвращает текущее время в виде миллисекунд UTC с начала эпохи. Таким образом, вы получаете одинаковые миллисекунды, даже если оба объекта календаря имеют разный часовой пояс.

Другие вопросы по тегам