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