我在这里回顾了几个与pytz
相关的问题,但似乎没有一个能解决我所看到的确切问题。在
在pytz documentation之后,下面是一个在多个时区中打印当前时间的循环,包括时区偏移量、时区名称以及datetime
对象是否认为它是DST。在
nowDT = datetime.datetime.now()
chicagoTz = pytz.timezone('America/Chicago')
chicagoDT = chicagoTz.normalize(chicagoTz.localize(nowDT))
sys.stdout.write( "%-10s %-35s %s\n" % ('Chicago',
chicagoDT.strftime("%Y/%m/%d %H:%M:%S %Z %z"),
chicagoDT.dst()) )
tzTups = [('New York', 'America/New_York'),
('London', 'Europe/London'),
('Sydney', 'Australia/Sydney')]
for tzTup in tzTups:
tz = pytz.timezone(tzTup[1])
locDT = tz.normalize(chicagoDT.astimezone(tz))
sys.stdout.write( "%-10s %-35s %s\n" % (tzTup[0],
locDT.strftime("%Y/%m/%d %H:%M:%S %Z %z"),
locDT.dst()) )
输出如下:
^{pr2}$例如,通过检查timeanddate.com,我们可以看到所有这些信息都是正确的,包括悉尼时间、偏移量和1:00:00
表示datetime
对象认为DST在悉尼有效。在
唯一的问题是悉尼时间被标记为EST
,而不是EDT
。实际上,我无法让Python在EDT
中声明Sydney,即使它知道DST偏移量:
tz = pytz.timezone('Australia/Sydney')
for i in range(1,13):
locDT = tz.normalize(tz.localize(datetime.datetime(2013, i, 15)))
sys.stdout.write("%02d %s %s\n" % (i, locDT.dst(), locDT.tzname()))
输出:
01 1:00:00 EST
02 1:00:00 EST
03 1:00:00 EST
04 0:00:00 EST
05 0:00:00 EST
06 0:00:00 EST
07 0:00:00 EST
08 0:00:00 EST
09 0:00:00 EST
10 1:00:00 EST
11 1:00:00 EST
12 1:00:00 EST
我做错什么了吗?系统上的/usr/share/zoneinfo
是否过期?{ol1}最新版本的CDDB可能没有更正?(我的说它在使用OLSON_VERSION = '2010b'
。)
IANA维护Olson数据库。在IANA的tz mailing list here(讨论持续了两个月:March 2013,April 2013)中讨论了澳大利亚应该使用什么时区缩写的问题。在
对于缩写应该是什么,各方似乎都有强烈的意见,这些强烈的意见导致了僵局。在
不应使用Some say the abbreviations are a relic of the past和,不应修正歧义以阻止其使用。在
显然,在澳大利亚没有公认的权威机构来定义这些缩略语。Some say conflicting organizations use different timezone abbreviations,为了不挑出政治立场,IANA选择了EST作为标准时间和夏令时。在
目前,奥尔森数据库在澳大利亚/悉尼的所有时区使用EST:
这表明,在澳大利亚/悉尼时区,EST用于跨越每个过渡边界。在
相关问题 更多 >
编程相关推荐