pytz 给出 'Africa/Khartoum' 的错误时区偏移量
pytz giving wrong timezone offset for 'Africa/Khartoum'
我有以下代码
import datetime
import pytz
tz_offset = datetime.datetime.now(pytz.timezone('Africa/Khartoum' or 'GMT')).strftime('%z')
print(tz_offset)
预期的输出是“+0200”,但它给出了“+0300”。
由于 pytz 从 IANA 获取信息,我联系了他们,他们说在他们的数据库中设置正确。这是他们的电子邮件回复:
On 6/19/20 10:40 AM, Ubay Abdelgadir wrote:
Khartoum's time zone is +2 since 1/Nov/2017. I think it is wrong in the
IANA database:
Zone Africa/Khartoum 2:10:08 - LMT 1931
2:00 Sudan CA%sT 2000 Jan 15 12:00
3:00 - EAT 2017 Nov 1
2:00 - CAT
该数据条目显示 Africa/Khartoum 自 2017 年 11 月以来一直是 +02
1,所以它似乎同意你的说法,即喀土穆的时间
自 1/Nov/2017.
以来,区域为 +2
编辑
我通过更新 pytz 版本解决了这个问题,它是 2016.7,这对我的案例来说已经过时了(2017 年发生了变化)
我无法重现 datetime.datetime.now
的示例。 pytz
还显示了 2017 年时区 'Africa/Khartoum' 的正确 UTC 偏移量变化。但是,您需要使用 localize
method (see e.g. here).
import datetime
import pytz
tz = pytz.timezone('Africa/Khartoum')
# correct UTC offset for "now":
tz_offset = tz.localize(datetime.datetime.now()).strftime('%z')
print(tz_offset)
# +0200
# also correct UTC offset around 1st Nov 2017:
tz_offset = tz.localize(datetime.datetime(2017,10,31)).strftime('%z')
print(tz_offset)
# +0300
tz_offset = tz.localize(datetime.datetime(2017,11,1)).strftime('%z')
print(tz_offset)
# +0200
如果你不localize
,你只会得到local mean time。使用 dateutil
,您不必本地化并可以直接实现时区:
import dateutil
tz = dateutil.tz.gettz('Africa/Khartoum')
tz_offset = datetime.datetime(2017,10,31, tzinfo=tz).strftime('%z')
print(tz_offset)
# +0300
tz_offset = datetime.datetime(2017,11,1, tzinfo=tz).strftime('%z')
print(tz_offset)
# +0200
我有以下代码
import datetime
import pytz
tz_offset = datetime.datetime.now(pytz.timezone('Africa/Khartoum' or 'GMT')).strftime('%z')
print(tz_offset)
预期的输出是“+0200”,但它给出了“+0300”。
由于 pytz 从 IANA 获取信息,我联系了他们,他们说在他们的数据库中设置正确。这是他们的电子邮件回复:
On 6/19/20 10:40 AM, Ubay Abdelgadir wrote:
Khartoum's time zone is +2 since 1/Nov/2017. I think it is wrong in the IANA database:
Zone Africa/Khartoum 2:10:08 - LMT 1931 2:00 Sudan CA%sT 2000 Jan 15 12:00 3:00 - EAT 2017 Nov 1 2:00 - CAT
该数据条目显示 Africa/Khartoum 自 2017 年 11 月以来一直是 +02 1,所以它似乎同意你的说法,即喀土穆的时间 自 1/Nov/2017.
以来,区域为 +2
编辑
我通过更新 pytz 版本解决了这个问题,它是 2016.7,这对我的案例来说已经过时了(2017 年发生了变化)
我无法重现 datetime.datetime.now
的示例。 pytz
还显示了 2017 年时区 'Africa/Khartoum' 的正确 UTC 偏移量变化。但是,您需要使用 localize
method (see e.g. here).
import datetime
import pytz
tz = pytz.timezone('Africa/Khartoum')
# correct UTC offset for "now":
tz_offset = tz.localize(datetime.datetime.now()).strftime('%z')
print(tz_offset)
# +0200
# also correct UTC offset around 1st Nov 2017:
tz_offset = tz.localize(datetime.datetime(2017,10,31)).strftime('%z')
print(tz_offset)
# +0300
tz_offset = tz.localize(datetime.datetime(2017,11,1)).strftime('%z')
print(tz_offset)
# +0200
如果你不localize
,你只会得到local mean time。使用 dateutil
,您不必本地化并可以直接实现时区:
import dateutil
tz = dateutil.tz.gettz('Africa/Khartoum')
tz_offset = datetime.datetime(2017,10,31, tzinfo=tz).strftime('%z')
print(tz_offset)
# +0300
tz_offset = datetime.datetime(2017,11,1, tzinfo=tz).strftime('%z')
print(tz_offset)
# +0200