使用Python中的tz.localize将UTC日期时间转换为英国日期时间

时间:2016-05-04 14:02:49

标签: python datetime

我正在尝试将UTC日期/时间转换为' Europe / London'时区。我已经尝试使用tz.localize使用日期,但我被告知日期时间并不天真。如果我尝试删除时区,我仍然会收到相同的错误。

从根本上说,我想要得到这个日期: 04/05/2016 15:00 成为这个日期: 04/05/2016 14:00

我的代码如下,我使用iso8601解析日期。

date = 2016-05-04 15:00:00+00:00
fix_pars = iso8601.parse_date(str(date))

我曾尝试过使用过pytz.localize,但没有成功,因为它并不像我的日期已经设置了时区。

我发现这方面的文档确实令人困惑。我想要的只是一个神奇的功能,它采用日期并根据请求的时区进行转换。我最好使用什么功能?

2 个答案:

答案 0 :(得分:6)

import pytz
from datetime import datetime
tz = pytz.timezone('UTC')
naive_time = datetime.strptime('2016-04-05 15:00', '%Y-%m-%d %H:%M')
tz_time = tz.localize(naive_time)
london_tz = pytz.timezone('Europe/London')
london_time = tz_time.astimezone(london_tz)

以下是我的输出:

>>> print tz_time
2016-04-05 15:00:00+00:00
>>> print london_time
2016-04-05 16:00:00+01:00

答案 1 :(得分:1)

你不需要tz.localize和utc时区,因为它有一个固定的utc偏移量(零)。如果您有一个timezone-aware日期时间对象(如其文字表示所示),那么将其转换为Europe/London时区:

london_dt = aware_dt.astimezone(pytz.timezone('Europe/London'))

就是这样。