为什么Pytz在纽约和底特律有不同的时区列表?

时间:2014-11-21 21:00:05

标签: python timezone pytz

>>> pytz.country_timezones['US']

America/New_York
America/Detroit
America/Kentucky/Louisville
America/Kentucky/Monticello
America/Indiana/Indianapolis
America/Indiana/Vincennes
America/Indiana/Winamac
America/Indiana/Marengo
America/Indiana/Petersburg
America/Indiana/Vevay
America/Chicago
America/Indiana/Tell_City
America/Indiana/Knox
America/Menominee
America/North_Dakota/Center
America/North_Dakota/New_Salem
America/North_Dakota/Beulah
America/Denver
America/Boise
America/Phoenix
America/Los_Angeles
America/Metlakatla
America/Anchorage
America/Juneau
America/Sitka
America/Yakutat
America/Nome
America/Adak
Pacific/Honolulu

从我在网上找到的所有内容来看,纽约和底特律时区之间绝对没有区别,包括夏令时。这只是检查前两个。他们必须有两个原因,对吗?

编辑:扩展我的研究,所有列出的UTC -5时区都有相同的DST信息,所以现在看起来更加冗余。我可以在东部标准时间删除以下所有内容......这样做有什么问题吗?

(UTC -5:00) New_York
(UTC -5:00) Detroit
(UTC -5:00) Kentucky/Louisville
(UTC -5:00) Kentucky/Monticello
(UTC -5:00) Indiana/Indianapolis
(UTC -5:00) Indiana/Vincennes
(UTC -5:00) Indiana/Winamac
(UTC -5:00) Indiana/Marengo
(UTC -5:00) Indiana/Petersburg
(UTC -5:00) Indiana/Vevay

2 个答案:

答案 0 :(得分:7)

Pytz使用IANA时区数据库(也称为Olson数据库)。正如@brenbarn所提到的,IANA数据库中的时区反映了自[1月1日] 1970以来本地时钟已经达成一致的任何国家区域。",其中不仅包括时间,还包括DST更改为好。

根据database,"大多数密歇根州从1973年开始观察DST,但在1975年有点晚了。"所以这意味着1970年密歇根州在东部时间,而东海岸则观察到夏令时。此外,DST直到1975年才在密歇根州开始,直到4月27日,即东部时区剩余时间后几周。

如果您下载最新的文件,应该有各种文件(northamerica,southamerica,africa等),这些文件具有不同时区的人类可读描述,以及任何更改/原因的解释不在不同的时区。


为了建立你的编辑,印第安纳代表美国境内的special case,因为它在两个时区之间的边界线上的历史存在。截至2014年11月,印第安纳大部分位于东部时区(除芝加哥附近的几个县和中部时间的埃文斯维尔附近),整个州都遵守夏令时。但自1970年以来,中/东边界已经转移了很多次。事实上,我敢打赌,大部分时区发生在2006年和2007年再次切换区域,采用日光节省时间。

答案 1 :(得分:3)

pytz使用zoneinfo时区定义,这显然将时区定义为“自1970年以来本地时钟都已达成一致的任何国家区域”。我怀疑时区或夏令时行为的历史变化导致了当前具有相同时间但并非总是如此的位置。 (例如,我认为博伊西和丹佛现在也是时间相等,但他们也有不同的条目。)