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)(官方标准在付费墙后面)。 –