Python datetime打印带有timezone和dst

时间:2014-04-07 13:47:52

标签: python datetime timezone

我遇到python和timezones的问题。

我有一个这样的日期字符串:

2014-04-08T01:00:00+02:00

我将dateutil.parse解析为datetime对象:

my_date = parser.parse(str(json)).replace(tzinfo=dateutil.tz.gettz('CET'))

这给了我一个日期时间的观察:

2014-04-08 01:00:00+02:00 with tzinfo = "Europe/Berlin" and _dst = 1:00:00

现在我想打印一个本地化的日期格式:

my_date.strftime("%Y-%m-%d %H:%M:%S")

不幸的是它返回:

'2014-04-08 01:00:00'

然而它应该是

'2014-04-08 00:00:00' in daylight saving time

任何想法如何获得正确的日期?

2 个答案:

答案 0 :(得分:0)

之间的时区/ dst行为显然存在差异
my_date.replace(tzinfo=pytz.timezone('Europe/Berlin'))

my_date.astimezone(pytz.timezone('Europe/Berlin'))

.replace不考虑dst,而.astimezone则不行。

答案 1 :(得分:0)

2014-04-07 23:00:00 UTC对应2014-04-08 01:00:00时区中的Europe/Berlin

#!/usr/bin/env python
import pytz
from dateutil.parser import parse

s = '2014-04-08T01:00:00+02:00'
tz = pytz.timezone("Europe/Berlin")
dt = tz.normalize(parse(s).astimezone(tz))
print(dt.strftime("%Y-%m-%d %H:%M:%S %Z%z"))
# -> 2014-04-08 01:00:00 CEST+0200
2014-04-08 00:00:00中的

Europe/Berlin对应2014-04-07 22:00:00 UTC

>>> tz.localize(parse('2014-04-08 00:00:00'), is_dst=None).astimezone(pytz.utc)
datetime.datetime(2014, 4, 7, 22, 0, tzinfo=<UTC>)