2016-12-15 146 views
0

我试图将UTC字符串转换为python datetime对象。Python日期时间对象不显示正确日期

我想要转换的字符串是: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

尝试使用日期= pytz.utc.normalize(tz.localize(DT)),或者你需要把一些抵消 –

回答

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>)