pytz.timezone('亚洲/重庆)是举止异常(pytz.timezone('

2019-10-18 05:19发布

我写一些Python(Python的2.7.4(默认情况下,2013年4月6日,19时54分46秒)[MSC v.1500 32位(英特尔)]在Win32,Windows 7中),代码需要处理的时区。 为此,我现在用的是pytz库(2012d版),这是在安全端我使用的easy_install刚刚更新。

我特别需要表达倍在成都,四川省,中国。 这是在“亚洲/重庆”时区应该是+07:提前实现“欧洲/伦敦”(这是我的本地时区)的00小时

出于某种原因,当我创建的偏移应用的“亚洲/ Chonqing”区一个datetime.datetime是+07:06不是+07:00我所期望的。 但是,当我在另一个区域中创建一个datetime.datetime(纽约,说了)它的工作原理确定。

我相信,该pytz数据库的准确性,以便我究竟做错了什么? 我会很感激的任何建议。

"""
Fragment of code for messing about with (foreign)
time-zones and datetime/ephem
"""

import datetime
import pytz

ChengduTZ = pytz.timezone('Asia/Chongqing')
ParisTZ   = pytz.timezone('Europe/Paris')
LondonTZ  = pytz.timezone('Europe/London')
NewYorkTZ = pytz.timezone('America/New_York')

MidnightInChengdu = datetime.datetime(2013, 6, 5, 0, 0, 0, 0, ChengduTZ)
MidnightInNewYork = datetime.datetime(2013, 6, 5, 0, 0, 0, 0, NewYorkTZ)

print("When it's midnight in Chengdu it's:")
print(MidnightInChengdu)
print(MidnightInChengdu.astimezone(LondonTZ))
print(MidnightInChengdu.astimezone(ParisTZ))
print(MidnightInChengdu.astimezone(NewYorkTZ))

print("\nWhen it's midnight in New York it's:")
print(MidnightInNewYork)
print(MidnightInNewYork.astimezone(LondonTZ))
print(MidnightInNewYork.astimezone(ParisTZ))
print(MidnightInNewYork.astimezone(ChengduTZ))

产生下面的输出:

When it's midnight in Chengdu it's:
2013-06-05 00:00:00+07:06
2013-06-04 17:54:00+01:00
2013-06-04 18:54:00+02:00
2013-06-04 12:54:00-04:00

When it's midnight in New York it's:
2013-06-05 00:00:00-05:00
2013-06-05 06:00:00+01:00
2013-06-05 07:00:00+02:00
2013-06-05 13:00:00+08:00

Answer 1:

您需要使用.localize()方法把日期时间在正确的时区,否则历史被错误地选择了偏移:

ChengduTZ = pytz.timezone('Asia/Chongqing')
MidnightInChengdu = ChengduTZ.localize(datetime.datetime(2013, 6, 5, 0, 0, 0, 0))
MidnightInNewYork = NewYorkTZ.localize(datetime.datetime(2013, 6, 5, 0, 0, 0, 0))

pytz documenation :

不幸的是使用标准的datetime建设者“”不起作用'与pytz许多时区的tzinfo说法。

随着这一变化,输出变为:

When it's midnight in Chengdu it's:
2013-06-05 00:00:00+08:00
2013-06-04 17:00:00+01:00
2013-06-04 18:00:00+02:00
2013-06-04 12:00:00-04:00

When it's midnight in New York it's:
2013-06-05 00:00:00-04:00
2013-06-05 05:00:00+01:00
2013-06-05 06:00:00+02:00
2013-06-05 12:00:00+08:00

需要注意的是, 纽约偏移也是不正确。



文章来源: pytz.timezone('Asia/Chongqing') is behaving strangely