我遇到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
任何想法如何获得正确的日期?
答案 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>)