PHP:为什么DateTimeZone :: listIdentifiers()函数列出UTC而不是GMT

时间:2015-12-17 07:07:59

标签: php timezone

为什么PHP的DateTimeZone :: listIdentifiers()函数列出 UTC 而不是 GMT 。?

GMT是一个时区,其中UTC是http://www.timeanddate.com/time/gmt-utc-time.html

的标准

1 个答案:

答案 0 :(得分:1)

实际上,它列出了两者,以及同一事物的其他几个名称:

GMT            GMT+0          GMT-0        GMT0        UTC        UCT
Etc/GMT        Etc/GMT+0      Etc/GMT-0    Etc/GMT0    Etc/UTC    Etc/UCT

Greenwich      Universal      Zulu
Etc/Greenwich  Etc/Universal  Etc/Zulu

您可以查看PHP's listthe generic tzdb list on Wikipedia

TZDB中的规范形式(这些形式来源于"Etc/UTC",但规范的定义可能因每个消费者而异。例如,CLDR认为"Etc/GMT"是规则的规范。其他系统可能会定期使用"UTC""GMT"。这四个是主要的,其余的主要是出于向后兼容的原因,通常应该避免使用。

至于为什么这些术语可以互换使用,这是因为出于所有意图和目的,它们在我们对它们的现代用法中是相同的。请参阅UTC vs GMT on my blog

一般来说,这是我受过教育的意见:

  • 使用GMT时专门提及英国时区中没有夏令时的部分(白天使用BST),或全年使用的地方像冰岛和其他人一样(除非他们在当地使用不同的惯例)。

  • 英国上下文中使用GMT,例如BBC如何在GMT中宣布时间。

  • 首选UTC时区偏移,尤其是完全限定时,例如UTC-08:00UTC+05:30。在短格式中使用GMT并使用GMT+2GMT-5等整数小时偏移量是可接受的,但仍应避免(恕我直言)这样做他们缺乏精确性。此外,定义不同国家时区的大多数法律文件是指协调世界时,即UTC--而不是GMT。

  • 在所有其他情况下,如果不确定,请选择UTC

你所指的

The timeanddate.com article没有错 - 这只是解释和观点的问题。从术语的角度来看,GMT是一个时区是绝对正确的,而UTC是一个计时系统。

我会给你一个简短的历史课:

  • 首先发明了GMT,最初定义为英格兰格林威治天文台观测到的平均太阳时。这实际上意味着通过望远镜观察恒星的位置,做一些数学计算以确定地球的旋转速度和位置,并手动设置时钟和结果。这最终变得更加自动化,产生UT1标准,

  • UTC后来发布,其定义更加科学精确。 UTC基于TAI atomic clock standard加上定期插入的leap seconds,以使其在UT1的0.9秒内保持对齐。

  • 随着UTC的采用,GMT最终在民间环境中意味着UTC。今天,当您听到GMT这个术语时,它与UTC的值相同。 GMT本身不再精确定义。

  • 值得一提的是,格林尼治标准时间最初被认为是在中午开始的“日子”,而不是午夜。我们很少这样做,包括当我们使用术语“GMT”时。

Wikipedia's article on GMT has a lot more of the history if you are interested.