为什么PHP的DateTimeZone :: listIdentifiers()函数列出 UTC 而不是 GMT 。?
GMT是一个时区,其中UTC是http://www.timeanddate.com/time/gmt-utc-time.html
的标准答案 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 list或the 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:00
或UTC+05:30
。在短格式中使用GMT
并使用GMT+2
或GMT-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.