pytz为“非洲/喀土穆”提供了错误的时区偏移

2024-06-10 07:43:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下代码

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

该数据记录显示,自2017年11月以来,非洲/喀土穆一直为+02 1,看来它同意你的说法,喀土穆的时间到了 自2017年11月1日起,分区为+2

编辑

我通过更新pytz版本解决了这个问题,该版本是2016.7版,对于我的案例来说已经过时(更改发生在2017年)


Tags: or代码import版本datetimeisnownov
1条回答
网友
1楼 · 发布于 2024-06-10 07:43:43

我无法重现datetime.datetime.now的示例pytz还显示了2017年时区“非洲/喀土穆”的正确UTC偏移量变化。但是,您需要使用^{}方法(参见例如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

相关问题 更多 >