马特·约翰逊(Matt Johnson)的答案是正确的。我只想补充一些想法。
时区与 UTC 偏移量
与 UTC 的偏移量只是 UTC 之前/之后的小时数、分钟数和秒数。仅此一项,这确实使日期时间成为时间轴上的特定时刻。但它并不像包括官方时区名称那样具有信息量。
虽然目前还没有包含时区名称的标准,但我确实希望其他人遵循java.time类的领导,在方括号中附加时区的名称。这种格式对我来说似乎是明智的,因为截断方括号部分以向后兼容非精明的软件会很简单。
例如:
.如果数据只是 ,我们将能够识别时间轴上的时刻,但无法将其他时刻调整到相同的思维框架中,因为我们不知道要应用什么调整规则。诸如 、 、 和 等区域都共享 的偏移量,但它们很可能具有与 的调整不同的其他有效调整。因此,如果您尝试向值添加三天,则确实无法忠实地计算结果,因为您不知道可能需要应用哪些调整,例如在这三天内可能发生的DST转换。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))的规则集。世界各地的政治家都喜欢调整他们的时区,甚至重新定义它们。所以这些规则经常变化。将时区视为随时间变化的偏移量的集合,在历史上的许多时间段中,每个时间段在该特定区域使用的特定偏移量。
您可以将时区视为与 UTC 的偏移量值的集合。在美国/Los_Angeles
今年的部分时间比UTC晚8小时,而一年的一部分时间将比UTC晚7个小时。这使得作为该时区的一部分收集的2点数据。
另一个例子是,在前几年,土耳其每年的一部分时间比UTC早2小时,每年的一部分时间比UTC提前3小时。2016年,这改为无限期地提前3个小时。因此,时区中的多个数据点。Europe/Istanbul
只需使用UTC
就个人而言,我认为即使使用诸如.如果没有时区,您也可以单独使用UTC。在本例中为(上午 9 点而不是上午 10 点)。2011-12-03T10:15:30+01:00
2011-12-03T09:15:30Z
通常,最佳做法是在存储和交换日期时间值时使用 UTC。将 UTC 视为一个真实时间,其中分区值或偏移值只是变化。