2011-04-04 22 views

Respuesta

62

Debido a horario de verano (horario de verano), el resultado depende de la época del año:

import datetime, pytz 

datetime.datetime.now(pytz.timezone('Asia/Jerusalem')).strftime('%z') 

# returns '+0300' (because 'now' they have DST) 


pytz.timezone('Asia/Jerusalem').localize(datetime.datetime(2011,1,1)).strftime('%z') 

# returns '+0200' (because in January they didn't have DST) 
25

¿Ha intentado utilizar el proyecto pytz y el utcoffset method?

p. Ej.

>>> import datetime 
>>> import pytz 
>>> pacific_now = datetime.datetime.now(pytz.timezone('US/Pacific')) 
>>> pacific_now.utcoffset().total_seconds()/60/60 
-7.0 
+23

Espera ... ¿qué? Jon Skeet? Python! = C# !!! No me quejo, solo sorprendido. – Russ

+2

BTW, el paquete de Ubuntu para pytz es python-tz. –

+0

No me atrevo a rechazarlo, pero utcoffset es un método en objetos datetime, lo mejor que puedo decir, por lo que no proporciona esto desde un nombre de zona horaria. – Tom

0

Tuve un problema similar al convertir a la marca de tiempo UTC del objeto python datetime. Mi fecha y hora era agnóstico de zona horaria (muy ingenuo) y como tal astimezone no funcionaría.

Para mitigar el problema, hice que mi zona horaria de objeto datetime fuera consciente y luego utilicé la magia anterior.

import pytz 
system_tz = pytz.timezone(constants.TIME_ZONE) 
localized_time = system_tz.localize(time_of_meeting) 
fmt = "%Y%m%dT%H%M%S" + 'Z' 
return localized_time.astimezone(pytz.utc).strftime(fmt) 

Aquí, constants.TIME_ZONE es donde tuve la zona horaria por defecto de mis objetos persistido.

Espero que esto ayude a alguien que intenta convertir objetos python datetime a UTC. Una vez convertido, formatee como lo desee.

Cuestiones relacionadas