如何将时区格式文件传递给Python

时间:2017-04-20 10:44:40

标签: python python-2.7 datetime timezone

我正在尝试将天真datetime对象与时区感知datetime对象进行比较。

我必须改变。

最初我收到了这个错误:

lastDate = start_date + ' ' + errorTime
lastDate = datetime.strptime(lastDate, '%Y-%m-%d %H:%M:%S')
time_diff = lastDate - FirstDate
TypeError: can't compare offset-naive and offset-aware datetimes

首先......我检查了两个日期时间对象的tzinfo ..

>>>FirstDate.tzinfo
>>>tzfile(u'/usr/share/zoneinfo/Europe/London')

>>>lastDate.tzinfo
>>>

这是预期的,因为lastDate是不知道的。

然后我导入了pytz并转换了天真的lastDate日期时间对象:

lastDate = start_date + ' ' + errorTime
lastDate = datetime.strptime(lastDate, '%Y-%m-%d %H:%M:%S')
lastDate = pytz.timezone('Europe/London').localize(lastDate)
time_diff = lastDate - FirstDate
TypeError: Timestamp subtraction must have the same timezones or no timezones

我再次检查时区:​​

>>>FirstDate.tzinfo
>>>tzfile(u'/usr/share/zoneinfo/Europe/London')

>>>lastDate.tzinfo
>>><DstTzInfo 'Europe/London' GMT0:00:00 STD>

我难以接受......如何将天真的日期时间对象lastDate提供给tzfile?

注意:我必须转换天真datetime对象lastDate以匹配tz感知datetime对象FirstDate。我无法修改FirstDate的tz。

2 个答案:

答案 0 :(得分:1)

我是这样做的:

lastDate = lastDate.replace(tzinfo=FirstDate.tzinfo)
lastDate - FirstDate

仅替换原始日期时间的 tzinfo 属性

答案 1 :(得分:0)

您应该能够从现有datetime获取时区并应用于其他时区。尝试:

lastDate = FirstDate.tzinfo.localize(lastDate)

而不是:

lastDate = pytz.timezone('Europe/London').localize(lastDate)

应该做你想做的事。