【问题标题】:How to properly store GMT offset?如何正确存储 GMT 偏移量?
【发布时间】:2011-06-29 10:05:39
【问题描述】:

所以最近我将所有位置及其 GMT 偏移量存储为整数(-12 到 12),一切正常,但现在我必须添加更多位置,我注意到其中一些位于 GMT +05 的时区:30 甚至 +05:45。你如何储存这些?喜欢 +5.5 还是 5.75?

问候, 布里迪斯

【问题讨论】:

  • 存储位置偏移量的问题在于它可以变化。考虑夏令时。如果您存储时区(例如美国/纽约),那么 PHP DateTime 对象可以在需要的时候计算出正确的偏移量。
  • 我知道,我已经使用 php 根据 DST 获取正确的时间。
  • 除非您丢弃了实际的时区信息(这比简单的偏移量、分钟粒度或不精确度要复杂得多),否则这是不可能的。
  • @Michael,我没有说我不存储时区的标识符。我也存储它并用它来检查 DST 是否处于活动状态。

标签: php timezone gmt


【解决方案1】:

解决方案很简单:不要这样做。存储相关的时区名称(例如“Europe/Berlin”)而不是 GMT 偏移量(“GMT+1”)。

【讨论】:

  • 我也存储时区标识符,但我需要一些占星术计算的偏移量。呃,现在我得出的结论是,我实际上对接受 gmt 偏移量作为数字的占星术软件有问题。
  • @Briedis:它只接受整数?对此的无知非常普遍。 EXIF 标头格式还有一个定义为整数的时区偏移字段...
  • @Michael,我深入研究了软件的源代码,它似乎接受浮点数,至少它检查分数是大于还是小于 5。我会坚持存储为浮点数(十进制),但仍使用时区名称向用户表示。
【解决方案2】:

常见的格式是shhmm,其中s 是符号,hh 是小时,mm 是分钟(例如,+0530-0500)。

【讨论】:

    【解决方案3】:

    最好的选择是将日期时间存储为 UTC 并将偏移量存储为时间,因此您始终可以通过调整偏移量来参考历史中正确的日期时间。您还可以将时区存储在第三个字段中,以便知道它来自哪个时区。

    【讨论】:

      【解决方案4】:

      您可以为分钟偏移量添加第二个整数列,默认值为 0,因为它将用于大多数条目。

      【讨论】:

        猜你喜欢
        • 2011-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-16
        • 2015-07-07
        • 2017-12-26
        • 2016-01-02
        相关资源
        最近更新 更多