Python TZ数据库和多个美国时区

Python TZ数据库和多个美国时区,python,django,timezone,pytz,Python,Django,Timezone,Pytz,我正在使用pytz将时区与我的用户配置文件相关联。最初我以为它只会包括PST、CST、EST等时区,但当我运行pytz.country\u timezones('US')时,我收到以下列表: [美国/纽约、美国/底特律、美国/肯塔基/路易斯维尔、美国/肯塔基/蒙蒂塞洛、美国/印第安纳/印第安纳波利斯、美国/印第安纳/文森斯、美国/印第安纳/温纳马克、美国/印第安纳/马伦戈、美国/印第安纳/彼得堡、美国/印第安纳/维维、美国/芝加哥、美国/印第安纳/泰尔城、美国/印第安纳/印第安纳州]/诺克斯、u

我正在使用pytz将时区与我的用户配置文件相关联。最初我以为它只会包括PST、CST、EST等时区,但当我运行
pytz.country\u timezones('US')
时,我收到以下列表:
[美国/纽约、美国/底特律、美国/肯塔基/路易斯维尔、美国/肯塔基/蒙蒂塞洛、美国/印第安纳/印第安纳波利斯、美国/印第安纳/文森斯、美国/印第安纳/温纳马克、美国/印第安纳/马伦戈、美国/印第安纳/彼得堡、美国/印第安纳/维维、美国/芝加哥、美国/印第安纳/泰尔城、美国/印第安纳/印第安纳州]/诺克斯、u'America/Menominee、u'America/North_Dakota/Center、u'America/North_Dakota/New_Salem、u'America/North_Dakota/Beulah、u'America/Denver、u'America/Boise、u'America/Phoenix、u'America/Los Angeles、u'America/Metlakatla、u'America/Anchorage、u'America/Juneau、u'America/Sitka、u'America/Yakutat、u'America/Nome、u'America/Adak、u'P太平洋/檀香山]

此外:
pytz.所有时区==582 公共时区==432

我住在得克萨斯州,总是选择芝加哥,因为这正是互联网的运作方式,但现在我不得不考虑这一点,我真的很困惑,我们应该在应用程序中使用哪些时区,哪些是多余的。例如,它们是一样的-为什么它们都存在?我知道这与印第安纳州的历史时区有关ne惨败,但为什么数据库没有更新以消除冗余

我从未在印第安纳州居住过,所以我不知道居民们习惯于看什么时区。另外,由于亚利桑那州等不参与DST的异常情况,这并不像包括PST、CST等那样简单

是否有一些正式的TZ数据库时区子集来说明所有美国居民?

例如,America/Kentucky/Louisville与America/Kentucky/Monticello是一样的——为什么它们都存在

因为它们不一样。从现在开始,它们可能会遵守相同的规则,但它们并不总是这样。为它们提供单独的区域ID意味着,在过去的某个时刻,您仍然可以确定当时的本地时间

在路易斯维尔和蒙蒂塞洛的案例中,从数据上看,他们似乎在20世纪90年代就有所不同。以下是20世纪90年代的数据,根据观察到的区域的哪个时期,有哪些名称和偏移:

America/Kentucky/Louisville
EST: [1989-10-29T06:00:00Z, 1990-04-01T07:00:00Z) -05 (+00)
EDT: [1990-04-01T07:00:00Z, 1990-10-28T06:00:00Z) -04 (+01)
EST: [1990-10-28T06:00:00Z, 1991-04-07T07:00:00Z) -05 (+00)
EDT: [1991-04-07T07:00:00Z, 1991-10-27T06:00:00Z) -04 (+01)
EST: [1991-10-27T06:00:00Z, 1992-04-05T07:00:00Z) -05 (+00)
EDT: [1992-04-05T07:00:00Z, 1992-10-25T06:00:00Z) -04 (+01)
EST: [1992-10-25T06:00:00Z, 1993-04-04T07:00:00Z) -05 (+00)
EDT: [1993-04-04T07:00:00Z, 1993-10-31T06:00:00Z) -04 (+01)
EST: [1993-10-31T06:00:00Z, 1994-04-03T07:00:00Z) -05 (+00)
EDT: [1994-04-03T07:00:00Z, 1994-10-30T06:00:00Z) -04 (+01)
EST: [1994-10-30T06:00:00Z, 1995-04-02T07:00:00Z) -05 (+00)
EDT: [1995-04-02T07:00:00Z, 1995-10-29T06:00:00Z) -04 (+01)
EST: [1995-10-29T06:00:00Z, 1996-04-07T07:00:00Z) -05 (+00)
EDT: [1996-04-07T07:00:00Z, 1996-10-27T06:00:00Z) -04 (+01)
EST: [1996-10-27T06:00:00Z, 1997-04-06T07:00:00Z) -05 (+00)
EDT: [1997-04-06T07:00:00Z, 1997-10-26T06:00:00Z) -04 (+01)
EST: [1997-10-26T06:00:00Z, 1998-04-05T07:00:00Z) -05 (+00)
EDT: [1998-04-05T07:00:00Z, 1998-10-25T06:00:00Z) -04 (+01)
EST: [1998-10-25T06:00:00Z, 1999-04-04T07:00:00Z) -05 (+00)
EDT: [1999-04-04T07:00:00Z, 1999-10-31T06:00:00Z) -04 (+01)
EST: [1999-10-31T06:00:00Z, 2000-04-02T07:00:00Z) -05 (+00)

America/Kentucky/Monticello
CST: [1989-10-29T07:00:00Z, 1990-04-01T08:00:00Z) -06 (+00)
CDT: [1990-04-01T08:00:00Z, 1990-10-28T07:00:00Z) -05 (+01)
CST: [1990-10-28T07:00:00Z, 1991-04-07T08:00:00Z) -06 (+00)
CDT: [1991-04-07T08:00:00Z, 1991-10-27T07:00:00Z) -05 (+01)
CST: [1991-10-27T07:00:00Z, 1992-04-05T08:00:00Z) -06 (+00)
CDT: [1992-04-05T08:00:00Z, 1992-10-25T07:00:00Z) -05 (+01)
CST: [1992-10-25T07:00:00Z, 1993-04-04T08:00:00Z) -06 (+00)
CDT: [1993-04-04T08:00:00Z, 1993-10-31T07:00:00Z) -05 (+01)
CST: [1993-10-31T07:00:00Z, 1994-04-03T08:00:00Z) -06 (+00)
CDT: [1994-04-03T08:00:00Z, 1994-10-30T07:00:00Z) -05 (+01)
CST: [1994-10-30T07:00:00Z, 1995-04-02T08:00:00Z) -06 (+00)
CDT: [1995-04-02T08:00:00Z, 1995-10-29T07:00:00Z) -05 (+01)
CST: [1995-10-29T07:00:00Z, 1996-04-07T08:00:00Z) -06 (+00)
CDT: [1996-04-07T08:00:00Z, 1996-10-27T07:00:00Z) -05 (+01)
CST: [1996-10-27T07:00:00Z, 1997-04-06T08:00:00Z) -06 (+00)
CDT: [1997-04-06T08:00:00Z, 1997-10-26T07:00:00Z) -05 (+01)
CST: [1997-10-26T07:00:00Z, 1998-04-05T08:00:00Z) -06 (+00)
CDT: [1998-04-05T08:00:00Z, 1998-10-25T07:00:00Z) -05 (+01)
CST: [1998-10-25T07:00:00Z, 1999-04-04T08:00:00Z) -06 (+00)
CDT: [1999-04-04T08:00:00Z, 1999-10-31T07:00:00Z) -05 (+01)
CST: [1999-10-31T07:00:00Z, 2000-04-02T08:00:00Z) -06 (+00)
例如,America/Kentucky/Louisville与America/Kentucky/Monticello是一样的——为什么它们都存在

因为它们不一样。从现在开始,它们可能会遵守相同的规则,但它们并不总是这样。为它们提供单独的区域ID意味着,在过去的某个时刻,您仍然可以确定当时的本地时间

在路易斯维尔和蒙蒂塞洛的案例中,从数据上看,他们似乎在20世纪90年代就有所不同。以下是20世纪90年代的数据,根据观察到的区域的哪个时期,有哪些名称和偏移:

America/Kentucky/Louisville
EST: [1989-10-29T06:00:00Z, 1990-04-01T07:00:00Z) -05 (+00)
EDT: [1990-04-01T07:00:00Z, 1990-10-28T06:00:00Z) -04 (+01)
EST: [1990-10-28T06:00:00Z, 1991-04-07T07:00:00Z) -05 (+00)
EDT: [1991-04-07T07:00:00Z, 1991-10-27T06:00:00Z) -04 (+01)
EST: [1991-10-27T06:00:00Z, 1992-04-05T07:00:00Z) -05 (+00)
EDT: [1992-04-05T07:00:00Z, 1992-10-25T06:00:00Z) -04 (+01)
EST: [1992-10-25T06:00:00Z, 1993-04-04T07:00:00Z) -05 (+00)
EDT: [1993-04-04T07:00:00Z, 1993-10-31T06:00:00Z) -04 (+01)
EST: [1993-10-31T06:00:00Z, 1994-04-03T07:00:00Z) -05 (+00)
EDT: [1994-04-03T07:00:00Z, 1994-10-30T06:00:00Z) -04 (+01)
EST: [1994-10-30T06:00:00Z, 1995-04-02T07:00:00Z) -05 (+00)
EDT: [1995-04-02T07:00:00Z, 1995-10-29T06:00:00Z) -04 (+01)
EST: [1995-10-29T06:00:00Z, 1996-04-07T07:00:00Z) -05 (+00)
EDT: [1996-04-07T07:00:00Z, 1996-10-27T06:00:00Z) -04 (+01)
EST: [1996-10-27T06:00:00Z, 1997-04-06T07:00:00Z) -05 (+00)
EDT: [1997-04-06T07:00:00Z, 1997-10-26T06:00:00Z) -04 (+01)
EST: [1997-10-26T06:00:00Z, 1998-04-05T07:00:00Z) -05 (+00)
EDT: [1998-04-05T07:00:00Z, 1998-10-25T06:00:00Z) -04 (+01)
EST: [1998-10-25T06:00:00Z, 1999-04-04T07:00:00Z) -05 (+00)
EDT: [1999-04-04T07:00:00Z, 1999-10-31T06:00:00Z) -04 (+01)
EST: [1999-10-31T06:00:00Z, 2000-04-02T07:00:00Z) -05 (+00)

America/Kentucky/Monticello
CST: [1989-10-29T07:00:00Z, 1990-04-01T08:00:00Z) -06 (+00)
CDT: [1990-04-01T08:00:00Z, 1990-10-28T07:00:00Z) -05 (+01)
CST: [1990-10-28T07:00:00Z, 1991-04-07T08:00:00Z) -06 (+00)
CDT: [1991-04-07T08:00:00Z, 1991-10-27T07:00:00Z) -05 (+01)
CST: [1991-10-27T07:00:00Z, 1992-04-05T08:00:00Z) -06 (+00)
CDT: [1992-04-05T08:00:00Z, 1992-10-25T07:00:00Z) -05 (+01)
CST: [1992-10-25T07:00:00Z, 1993-04-04T08:00:00Z) -06 (+00)
CDT: [1993-04-04T08:00:00Z, 1993-10-31T07:00:00Z) -05 (+01)
CST: [1993-10-31T07:00:00Z, 1994-04-03T08:00:00Z) -06 (+00)
CDT: [1994-04-03T08:00:00Z, 1994-10-30T07:00:00Z) -05 (+01)
CST: [1994-10-30T07:00:00Z, 1995-04-02T08:00:00Z) -06 (+00)
CDT: [1995-04-02T08:00:00Z, 1995-10-29T07:00:00Z) -05 (+01)
CST: [1995-10-29T07:00:00Z, 1996-04-07T08:00:00Z) -06 (+00)
CDT: [1996-04-07T08:00:00Z, 1996-10-27T07:00:00Z) -05 (+01)
CST: [1996-10-27T07:00:00Z, 1997-04-06T08:00:00Z) -06 (+00)
CDT: [1997-04-06T08:00:00Z, 1997-10-26T07:00:00Z) -05 (+01)
CST: [1997-10-26T07:00:00Z, 1998-04-05T08:00:00Z) -06 (+00)
CDT: [1998-04-05T08:00:00Z, 1998-10-25T07:00:00Z) -05 (+01)
CST: [1998-10-25T07:00:00Z, 1999-04-04T08:00:00Z) -06 (+00)
CDT: [1999-04-04T08:00:00Z, 1999-10-31T07:00:00Z) -05 (+01)
CST: [1999-10-31T07:00:00Z, 2000-04-02T08:00:00Z) -06 (+00)
例如,America/Kentucky/Louisville与America/Kentucky/Monticello是一样的——为什么它们都存在

两个地点的当前时间可能相同,但情况并非总是如此

$ perl -MDateTime::Format::Strptime -E'
   my @tz = qw( America/Kentucky/Monticello America/Kentucky/Louisville );

   my $format = DateTime::Format::Strptime->new(
      pattern   => "%Y-%m-%dT%H:%M:%S",
      time_zone => "UTC",
      on_error  => "croak",
   );

   my $dt = $format->parse_datetime("2000-05-01T00:00:00");

   for my $tz (@tz) {
      say $dt->clone->set_time_zone($tz)->iso8601;
   }
'
2000-04-30T19:00:00
2000-04-30T20:00:00
它不能从数据库中删除,因为这会破坏处理过去发生的日期的程序

例如,America/Kentucky/Louisville与America/Kentucky/Monticello是一样的——为什么它们都存在

两个地点的当前时间可能相同,但情况并非总是如此

$ perl -MDateTime::Format::Strptime -E'
   my @tz = qw( America/Kentucky/Monticello America/Kentucky/Louisville );

   my $format = DateTime::Format::Strptime->new(
      pattern   => "%Y-%m-%dT%H:%M:%S",
      time_zone => "UTC",
      on_error  => "croak",
   );

   my $dt = $format->parse_datetime("2000-05-01T00:00:00");

   for my $tz (@tz) {
      say $dt->clone->set_time_zone($tz)->iso8601;
   }
'
2000-04-30T19:00:00
2000-04-30T20:00:00

它不能从数据库中删除,因为这会破坏处理过去发生的日期的程序。

Backwards.PST、CST等仅适用于亚利桑那州和其他不参与DST的地方。Backwards.PST、CST等仅适用于亚利桑那州和其他不参与DST的地方。谢谢Jon。因此,当谈到清单ese在前端,如何选择一个包含所有当前美国时区但不包括历史冗余的子集?@praterade:首先,你需要计算出你想走多远。然后你需要一些方法来确定基于该时间范围的时区是否相等。让你很容易做到这一点,但我恐怕我不知道其他库。如果你能在后端某处使用它来定期填充文件(例如),我可以给你相关的野田佳彦时间代码。非常感谢,但我现在还不错。我只是失望地得知没有一个正式的标准化列表。似乎TZ数据库至少能够将FK包含到该地区的“正式”时区(如蒙蒂塞洛地图到纽约,这可能是EST的规定时区)PrAtdAd:当每个人的需求可能不同的时候,这样一个规范化的清单是如何工作的,当他们想考虑区域“相等”时,你可能想看看最近ZTDB版本中的ZONE.1970.TAB文件。我的意思是有一个当前的列表(日期> =今天)是很好的。美国时区中没有重复的部分。谢谢Jon。那么,当要在前端列出这些时区时,如何选择一个包含所有当前美国时区但不包括历史冗余的子集呢?@praterade:好吧,首先,你需要计算出你想走多远。然后你需要一些确定的方法ng基于该时间范围,区域是否相等。让您很容易做到这一点,但恐怕我不知道其他库。如果您能够在后端某处使用该代码定期填充文件(例如),我可以为您提供相关的Noda时间代码。感谢,但我现在还不错。我只是失望地得知没有一个正式的标准化列表。似乎TZ数据库至少能够将FK包含到该地区的“正式”时区(如蒙蒂塞洛地图到纽约)