ISO 8601夏令时

bra*_*sen 5 datetime iso8601

我的API代表使用ISO 8601的客户的时间.我们有一个功能,我们想要显示它来自哪个时区.通过纯粹存储时区偏移,我们正在放弃对该细节的追踪.

也就是说,犹他州和亚利桑那州-06:00一年中有一半时间观察MST ,而犹他州则转向-07:00另一半的MDT .我们目前的解决方案是确定日期是否在夏令*DT时期间以及在*ST其他时间使用时区,但是来自亚利桑那州的ISO 8601日期将导致太平洋夏令时.

有没有办法指定是否以ISO 8601格式观察夏令时?喜欢2016-01-11T13:00:04Z DST0或类似的东西?

小智 6

ISO 8601 在“时区”和“UTC 偏移”这两个术语之间非常平滑(并且容易产生误导)。

为了引用全球唯一的时刻,像“Thh:mm:ssZ+01:00”这样的表示在以下意义上完美地工作:

  • 它指定了UTC 刻度上的一个独特点,
  • 在 DST 期间,始发者位于 Z+01 还是 Z+00是不可知的。

另外,如果您想传达发起者的位置,则可以在8601 结构之外附加一个合适的位置字段。无需在时间字段中包含位置。

就我个人而言,我希望看到“时”从 ISO 8601 中删除。


NUL*_*ter 1

我找不到使用 ISO8601 或 RFC2822 很好地做到这一点的方法。我将时间存储在 MySql 数据库中 - 在本文中称为“电视时间”的时间https://stackoverflow.com/tags/timezone/info。与非夏令时相比,夏令时期间电视时间与 UTC 的偏移量不同 - 但我的用户将其称为同一时间。EG:“我早上 9 点开始工作”,而不是“我在夏季 22:00 UTC 开始工作,冬季 21:00 UTC 开始工作”。

我的解决方案是向数据库添加一个额外的字符串列(我将其命名为“tzid”)并存储此列表中的文本 tzid https://unicode.org/cldr/charts/latest/supplemental/zone_tzid.html(并在PHP DateTimeZone::listAbbreviations() 也给出了一个列表)。日期时间存储在 mysql DateTime 列中

大多数时候,我将“电视时间”从日期时间列传递到我的应用程序,它只会呈现而不会产生任何后果。如果我需要比较跨时区的时间或计算时间间隔,我可以使用 tzid 列转换为 UTC。