请考虑以下示例,在该示例中,我采用了一个简单的日期时间,在UTC中将其设为时区,然后转换为UTC-5:
d1 = datetime.datetime(2019,3,7, 7,45) d2 = pytz.utc.localize(d1) print(f'UTC : {d2}') d3 = d2.astimezone(pytz.timezone('Etc/GMT-5')) print(f'UTC-5: {d3}')
输出为:
UTC : 2019-03-07 07:45:00+00:00 UTC-5: 2019-03-07 12:45:00+05:00
我原本希望UTC-5时间为02:45,但是5小时的偏移量已 添加 到UTC,而不是减去。
UTC-5
02:45
问题:
'Etc/GMT-5'
UTC
您正在使用pytz,而不仅仅是Python的datetime。 像dateutil一样,pytz使用Olson tz数据库。
pytz
datetime
Olson tz数据库定义了符合POSIX样式的Etc/GMT+N时区:
Etc/GMT+N
以“ Etc / GMT”开头的区域名称的符号与标准ISO 8601约定相反。在“ Etc”区域中,格林尼治标准时间以西的区域带有正号,而东部地区则具有负号(例如,“ Etc / GMT-14”比格林尼治标准时间早14小时。)
因此,要将UTC转换为偏移量为-5的时区,可以使用Etc/GMT+5:
Etc/GMT+5
import datetime as DT import pytz naive = DT.datetime(2019, 3, 7, 7, 45) utc = pytz.utc gmt5 = pytz.timezone('Etc/GMT+5') print(utc.localize(naive).astimezone(gmt5)) # 2019-03-07 02:45:00-05:00