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