Answer by Matt Johnson是正確的。我只想補充一些想法。
時區隨偏移從 - UTC
一個offset-from-UTC僅僅是若干小時,分鐘和秒超前/落後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
今年的部分時間比UTC落後8小時,部分時間會比UTC晚7個小時。這使得2點數據作爲該時區的一部分被收集。
另一個例子,在過去的幾年中,土耳其每年的部分時間比UTC提前2個小時,每年的部分時間提前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)和[星期日期](https://en.wikipedia.org/wiki/ISO_week_date)上的優秀文章,以及也許是[標準草案](https://duckduckgo.com/?q=ISO+8601+draft&t=osx&ia=web)(官方標準在付費牆後面)。 –