Подтвердить что ты не робот

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, тогда он должен быть разным значением в миллисекундах против локального часового пояса.

4b9b3361

Ответ 1

Почему разный часовой пояс дает ТОЛЬКО значение в миллисеку?

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

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

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

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

Ответ 2

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

Ответ 3

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