我试图将UTC
字符串转换为python datetime
对象。
我要转换的字符串是:2016-12-16T23:00:00.000Z
,格式为UTC
。当我将代码转换为不同的时区时,我得到2016-12-16 23:00:00+01:00
,这是正确的行为。
我的问题是,为什么当我访问datetime
对象时,这一天仍然是16
而不是17
,正如我希望在添加1 hour
时发生的那样到23:00
。
我错过了什么?
我的代码
tz = pytz.timezone("Europe/Ljubljana")
dt = datetime.datetime.strptime(start_date, "%Y-%m-%dT%H:%M:%S.000Z")
date = tz.localize(dt)
print 'Date: ', date.strftime('%d')
print 'Date: ', date
结果
Date: 16
Date: 2016-12-16 23:00:00+01:00
答案 0 :(得分:1)
这是预期的行为。 dt
没有设置时区。当您拨打tz.localize(dt)
时,只需指定时区。
这是你想要做的:
tz = pytz.timezone("Europe/Ljubljana")
dt = datetime.datetime.strptime(start_date, "%Y-%m-%dT%H:%M:%S.000Z")
dt = dt.replace(tzinfo=pytz.utc) # you specify the time is UTC
print dt.astimezone(tz) # and now you convert dt to your preferred timezone
您获得:
datetime.datetime(2016, 12, 17, 0, 0, tzinfo=<DstTzInfo 'Europe/Ljubljana' CET+1:00:00 STD>)