2011-01-24 11 views
13
import time 
print time.strftime("%a, %d %b %Y %I:%M %p %Z", time.gmtime()) 

Vivo en California. Por alguna razón, este código informa la hora en GMT, en lugar de respetar la zona horaria del sistema. Sé que strftime sabe que estoy en el Pacífico, porque todavía imprime 'PST' al final, pero todavía quedan 8 horas por delante. ¿Alguien más se da cuenta de esto? ¿Alguien sabe lo que está mal con mi sistema o mi código?Python: strftime, gmtime no respeta la zona horaria

EDITAR: corriendo date en la línea de comandos me da la fecha correcta. Además, he ejecutado esto en dos computadoras diferentes (Mac y Linux) y ambas informan 8 horas más adelante. ¿Se espera que corrija la zona horaria antes de usar strftime?

+0

¿Qué sucede si acaba de ejecutar "fecha" en la línea de comandos? ¿Podría ser que el tiempo de su computadora está configurado en GMT, pero tiene una zona horaria de California? –

Respuesta

25

time.gmtime() devuelve el tiempo en UTC. Lo que necesita es time.localtime(), que es timezone-aware. Este comportamiento está bien documentado en el time module documentation.

EDIT:

para convertir cualquier marca de tiempo time.time() estilo a una struct_time, puede proporcionar un argumento para time.localtime():

>>> print time.strftime("%a, %d %b %Y %I:%M:%S %p %Z", time.localtime(10.5)) 
Thu, 01 Jan 1970 02:00:10 AM EET 
+0

time.localtime() es genial, pero obtengo mi marca de tiempo de un archivo en UTC. ¿Cómo convierto una zona horaria de UTC a mi zona horaria local? –

+0

time.localtime() funciona muy bien. ¡Gracias! –

+1

@Shaun: puede encontrar [pytz] (http://pytz.sourceforge.net/) útil para más conversiones de zona horaria involucradas. 'time.localtime' tiene algunos problemas cuando se trabaja con marcas de tiempo que no están disponibles ahora (por ejemplo, en el pasado o en el futuro más allá de un cambio de horario de verano, etc.). – ephemient

0

Para cambiar la zona horaria en el sistema UNIX, hacer algo como esto:

ln -sf /usr/share/zoneinfo/America/Los_Angeles /etc/localtime 

Navegar alrededor de /usr/share/zoneinfo/ encontrar lo que desee y modifique el comando anterior

+0

¿Por qué el voto hacia abajo sin comentarios? – Landon

Cuestiones relacionadas