为什么有多个时区选择都会解析为东部标准时间(EST)?

4
我需要添加只针对北美的更改时区功能。总共有六个时区,包括夏威夷和阿拉斯加。
我在美国东部,所以我的时区是东部时间。当为我的位置选择时区时,我可以选择纽约、芝加哥等几个城市。我不确定为什么有这么多不同的时区都解析到相同的偏移量,除非是因为夏令时。
我想要的基本上只有这六个区域:
EST CST MST PST AKST HST
有人能告诉我为什么有这么多不同的时区可供选择但最终得到的结果却是相同的吗?

我当然希望如果我选择芝加哥作为我的位置,我不会最终进入东部时区,因为它实际上位于中部时区。 - Schleis
@Schleis,嗯...芝加哥什么时候允许计算机进入他们的城市了? - NaN
1
该列表基于IANA时区数据库 (http://www.iana.org/time-zones)。 - Sergiu Paraschiv
1个回答

7
PHP时区列表来自PECL时区数据库。PECL时区数据库源于由IANA组织维护的“Olson”数据库。 在IANA网站上,他们对时区数据库维护的说明如下: 时区数据库(通常称为tz或zoneinfo)包含代表世界各地许多典型位置的本地时间历史的代码和数据。它定期更新以反映政治机构对时区边界、UTC偏移和夏令时规则的更改。其管理程序在BCP 175:《维护时区数据库的程序》中有记录。
时区问题的复杂性进一步加剧了并非所有州都使用夏令时的事实(例如亚利桑那州、夏威夷州、波多黎各等不使用夏令时)。
因此,人们可以得出这样的结论,即特定城市的时区基于其区域边界、夏令时规则和其他政治因素。因此,仅仅因为某个城市位于西部并不意味着它保证是太平洋标准时间(例如)。
此外,手动将西部地区设置为PST比设置其实际的国家/城市时区标识符在技术上更难以维护,因此,如果它们的偏移量在未来发生变化,您的应用程序将继续设置正确的时间。

1
优秀的回答,Kristian!谢谢,这解释了我需要知道的一切。我本来希望能够避免构建时区表,但根据你的回答,看来我还是得这么做。 - NaN
1
@NaN - Kristian的回答非常准确。但我不明白这会让你认为需要制作一个时区表。你绝对不应该这样做。有关时区的所有信息都在IANA数据库中。 - Matt Johnson-Pint
@NaN - 您可能还会发现时区标签wiki很有用。关键点在于,由于夏令时的原因,偏移量可以在单个时区内发生变化。一个偏移本身不能代表完整的时区。 - Matt Johnson-Pint
@MattJohnson,嘿Matt,感谢您的建议。我想做的是将北美时区存储在一个表中,例如America/NewYork等,并以这种方式调用它们。我没有计划计算偏移量。我还是错了吗?只是为了澄清,如果我有一个在纽约的客户,我希望能够拉取那个时区并为他们加载它。如果该客户在加利福尼亚州,则希望能够加载America/Pacific时区。 - NaN
你是指 America/New_YorkAmerica/Los_Angeles。;) 无论如何,只需使用 DateTimeZone::listIdentifiers 即可。你不需要将它们复制到自己的数据库中。 - Matt Johnson-Pint

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接