我的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”这样的表示在以下意义上完美地工作:
另外,如果您想传达发起者的位置,则可以在8601 结构之外附加一个合适的位置字段。无需在时间字段中包含位置。
就我个人而言,我希望看到“时区”从 ISO 8601 中删除。
我找不到使用 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。
归档时间: |
|
查看次数: |
3104 次 |
最近记录: |