【问题标题】:PHP: Why does DateTimeZone::listIdentifiers() function list UTC instead of GMTPHP:为什么 DateTimeZone::listIdentifiers() 函数列出 UTC 而不是 GMT
【发布时间】:2015-12-18 01:31:59
【问题描述】:

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

GMT 是一个时区,而 UTC 是http://www.timeanddate.com/time/gmt-utc-time.html 的标准

【问题讨论】:

    标签: php timezone


    【解决方案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",但 canonical 的定义可能因每个消费者而异。例如,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 最初认为“一天”从中午开始,而不是午夜。我们很少再这样做了,包括我们使用“GMT”一词时。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-14
      • 2021-11-12
      • 2011-01-22
      • 2011-12-26
      • 1970-01-01
      • 1970-01-01
      • 2012-07-01
      • 1970-01-01
      相关资源
      最近更新 更多