2013-05-23 5 views
11

-je conserver mon datetime UTC int comme ceci:Comment `strftime` ayant le fuseau horaire ajusté?

import pytz, datetime 

timeUTC = datetime.datetime(2013, 5, 23, 19, 27, 50, 0) 
timezoneLocal = pytz.timezone('Europe/Vilnius') 

timeLocal = timezoneLocal.localize(timeUTC) 

Mais lorsque je tente d'imprimer, il me donne les heures normales UTC

>>> timeLocal.strftime('%H:%M:%S') 
'19:27:50' 

Je m'y attendais pour revenir '22:27:50' puisque c'est l'heure locale (pytz.timezone('Europe/Vilnius') est +3 en ce moment). Qu'est-ce que j'oublie ici?

Répondre

19

Localisez la chaîne de date en tant que datetime UTC, puis utilisez astimezone pour la convertir en fuseau horaire local.

import pytz, datetime 

timeUTC = datetime.datetime(2013, 5, 23, 19, 27, 50, 0) 
timezoneLocal = pytz.timezone('Europe/Vilnius') 
utc = pytz.utc 
timeLocal = utc.localize(timeUTC).astimezone(timezoneLocal) 
print(timeLocal) 
# 2013-05-23 22:27:50+03:00 

localize n'a pas convertir datetimes, il interprète la chaîne de date comme si elle avait été écrite dans ce fuseau horaire. localize génère une date et heure timezone-aware sur un datetime naïf (tel que timeUTC). astimezone convertit les datetime time-aware en d'autres fuseaux horaires.

+1

qui a fonctionné comme un charme (même si je ne suis pas sûr que c'est aussi intuitif que cela pourrait être ...), merci! –