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

9
>>> 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时区都有完全相同的夏令时信息,因此现在似乎更加冗余了。我是否可以将下面的所有内容都移除,只保留东部标准时间?这样做有什么问题吗?

(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

1
它允许用户选择最接近他们的城市,而无需知道它所在的时区。 - kindall
1
这不是不同城市存在的原因。你可能更接近一个不在你所在时区的城市。例如,印第安纳州西部大部分地区都在美国/纽约时区,即使它在物理上更靠近芝加哥;一个被认为是芝加哥地区一部分的邻近城镇,即使它离该城市更远,也会使用美国/芝加哥时区。这些城市只是方便用于引用TZ定义的句柄。 - fool4jesus
2个回答

12

Pytz使用IANA时区数据库(也称为Olson数据库)。正如@brenbarn所提到的那样,IANA数据库中的时区反映了“自1970年 [1月1日]以来所有当地时钟都已同意的任何国家/地区。”,这不仅包括时间,还包括夏令时更改。

根据数据库的记录,“密歇根州在1973年开始观察夏令时,但在1975年有点晚。”因此,这意味着在1970年密歇根州处于EST时区,而东海岸则观察夏令时。此外,密歇根州直到1975年4月27日才开始实行夏令时,比东部时区其他地区晚了几周。

如果您下载最新的文件,应该会有各种文件(北美,南美,非洲等),其中包含人类可读的描述不同时区的说明,以及任何更改/原因的解释,以防它们不在不同的时区。


在你的编辑基础上,印第安纳州在美国内部属于特殊情况,这是由于其历史存在于两个时区边界线之间。截至2014年11月,印第安纳州大部分地区都处于东部时区(除了靠近芝加哥和埃文斯维尔附近的一些县城,它们处于中央时区),整个州都遵循夏令时。但自1970年以来,中央/东部边界已经多次移动。事实上,我敢打赌,大多数时区是在2006年和2007年一些县城转换时区并采用夏令时的过程中发生的。


3

pytz使用zoneinfo时区定义,这些定义显然将时区定义为“自1970年以来所有本地时钟都一致的任何国家/地区。”我猜想历史上的时区或夏令时行为变化导致了当前有相同时间但过去不一定相同的地点。(例如,我认为博伊西和丹佛现在也是相等的,但它们也有不同的条目。)


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