【发布时间】:2016-02-29 20:34:28
【问题描述】:
我们有一个城市数据库及其地理坐标。一旦我们使用tzworld 填充了相应的时区。用户设置位置,包括城市,城市有时区——这里我们如何知道用户的时区(我们需要在服务器上呈现日期和时间)。但是时区正在改变:一些新的出现,一些旧的正在被删除。
是否有任何最佳做法或工具来处理此类更改?
即有一个城市Foo,时区为Foo/Bar。一天 tzdata 发生了变化,Foo/Bar 被分割成 Foo/Old_Bar 和 Foo/New_Bar 时区,具有相同的 UTC 偏移量。我们的数据库中仍然有Foo/Bar。实际上,这是一个 BC 中断,但没关系,因为,比如说,我们可以处理那些 BC 中断。但随后 tzdata 再次更改,现在 Foo/New_Bar 具有不同的偏移量。麻烦来了。从那一刻起,来自Foo city 的一些用户看到了错误的当地时间。
只是为了确保您正确理解我的意思:这与 DST 无关,而是关于时区(它们的名称)正在更改的事实。
据我所知,我们需要一种机器可读的 tzdata diff。喜欢
split: Foo/Bar Foo/Old_Bar,Foo/New_Bar
move: Foo/New_Bar -05:00
这个问题让我觉得存储时区是个坏主意。有没有更好的?
【问题讨论】:
-
好的日期库不是已经这样做了吗? (跟踪时区变化等)你能举一个具体的例子,
Foo/New_Bar在同一日期可以有两个不同的偏移量吗?这是您遇到的现实问题吗? (我并不是说它不是——我只是很难想象它可能适用于哪里) -
@Pekka웃 到目前为止,这不是一个现实世界的问题(主要是因为我们的大多数用户来自具有稳定时区的地区),但它很容易做到。我不小心注意到一些时区消失了,一些时区出现在最近的 tzdata 更新之后。我想要一个强大的解决方案,而这个可能的问题,尤其是缺乏相关信息一直困扰着我。
-
但是你真的有一个用例可能会出现问题吗?如果您有日期和时间,那么您的图书馆应该能够将其解析到一个时间点(并且它应该能够处理crazy edge cases; 开发人员spend a lot of time 确保他们这样做)。如果区域消失或添加,库应该有这些更改的列表。这真的是您需要在应用程序中处理的事情吗?
-
@Pekka웃 查看 Matt Johnson 出色而详尽的回答,它可以帮助您理解问题,我不会说得更好。