Answer by Matt Johnson спот-правильно. Я просто добавлю несколько мыслей.
часового пояса по сравнению с офсетным из-UTC
offset-from-UTC An это всего лишь несколько часов, минут и секунд вперед/за UTC. В одиночку это делает дату-время в определенный момент времени. Но это не так информативно, как включение official time zone name.
Пока еще нет стандарта для включения имени часового пояса, я надеюсь, что другие последуют за лидерами классов java.time, добавляя в квадратных скобках имя часового пояса. Этот формат кажется мне разумным, так как было бы просто усечь часть квадратной скобки, которая будет обратно совместима с неподготовленным программным обеспечением.
Например:
2011-12-03T10:15:30+01:00[Europe/Paris]
. Если бы данные были только 2011-12-03T10:15:30+01:00
, мы могли бы определить момент на временной шкале, но не смогли бы настроить другие моменты в одном и том же настроении, так как мы не знали бы, какие правила корректировки применяются. Зоны, такие как Europe/Zagreb
, Africa/Brazzaville
, Arctic/Longyearbyen
и Europe/Isle_of_Man
, разделяют смещение +01:00
, но они могут иметь другие действующие изменения, отличные от других, чем Europe/Paris
. Поэтому, если вы попытаетесь добавить три дня к значению 2011-12-03T10:15:30+01:00
, вы действительно не можете точно вычислить результат, потому что вы не знаете, какие корректировки могут потребоваться для применения, такие как реверсирование DST, которое может возникать в течение этих трех дней.
Часовой пояс определяет набор правил для обработки аномалий, таких как Daylight Saving Time (DST). Политики во всем мире пользуются корректировками своих часовых поясов или даже переопределяют их. Поэтому эти правила часто меняются. Подумайте о часовом поясе как совокупности смещений с течением времени, много периодов времени в истории, в которых каждый период имел определенное смещение в использовании в этой конкретной области.
Вы можете думать о часовом поясе как о наборе значений смещения от UTC. В America/Los_Angeles
часть в этом году на 8 часов меньше UTC, а часть года будет на 7 часов меньше UTC. Это делает 2 пункта данных, собранных как часть этого часового пояса.
Другой пример, в предыдущие годы Турция проводила часть каждого года на 2 часа раньше UTC и часть каждого года на 3 часа вперед. В 2016 году это изменилось на неопределенное время на 3 часа вперед.Таким образом, несколько точек данных в часовом поясе Europe/Istanbul
.
Просто используйте UTC
Лично я не вижу особого значения в даже с использованием значений, таких как 2011-12-03T10:15:30+01:00
. Без часового пояса вы можете использовать только UTC. В этом случае 2011-12-03T09:15:30Z
(9 часов вместо 10 часов утра).
Как правило, наилучшей практикой является использование UTC при хранении и обмене значениями даты и времени. Подумайте о формате UTC как одноразовое время, причем значения зонирования или смещения являются просто вариациями.
Вторая точка выстрела делает этот вопрос довольно широким. – chrylis
Как я читал [описание W3C] (https://www.w3.org/TR/NOTE-datetime), вы выглядите правильно: ISO 8601 поддерживает смещения зоны, но не временные интервалы с переменными смещениями (обычно это часовые пояса с летнее время, которое идет для многих часовых поясов IANA). –
@ OleV.V. Документ W3C Note, который вы связали, представляет собой лишь краткий обзор фактического стандарта ISO 8601. Я предлагаю прочитать отличную [статью Википедии об ISO 8601] (https://en.wikipedia.org/wiki/ISO_8601) и в [week date] (https://en.wikipedia.org/wiki/ISO_week_date) и возможно, [черновик стандарта] (https://duckduckgo.com/?q=ISO+8601+draft&t=osx&ia=web) (официальный стандарт находится за платной линией). –