2009-07-10 35 views

Respuesta

10

Eche un vistazo al Módulo Python Time.

from time import gmtime, strftime 
print strftime("%z", gmtime()) 

estándar del Pacífico Hora

+0

¿estamos viendo diferentes documentos o es ''% Z''? – SilentGhost

+0

@ SilentGhost: "% z" y "% z" son exactamente iguales en Python. – ahawker

+11

sí, pero ** mayúsculas ** 'Z' y ** minúsculas **' z' no lo son. – SilentGhost

60

que debería funcionar:

import time 
time.tzname 

devuelve una tupla de dos cadenas: el primero es el nombre de la zona horaria local sin cambio horario, el segundo es el nombre de la zona horaria DST local.

+19

Para llevar esto más adelante, puede usar 'time.tzname [time.daylight]' para obtener el nombre de la zona horaria actual, teniendo en cuenta el horario de verano. –

+9

Nuevamente, 'time.daylight' no indica que DST esté activo. Simplemente indica si la zona horaria observa o no el horario de verano. Está buscando 'time.localtime(). Tm_isdst'. – marr75

+0

Solo para agregar para los usuarios de Windows, los valores para la zona horaria se definieron en 'HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Time Zones \' – swdev

4

Si prefiere desfases de UTC sobre cadenas:

time.timezone/-(60*60) 
+4

Esto se calculará incorrectamente cuando (/ if) DST esté en efecto. – marr75

20

Proporciona un desplazamiento como en la respuesta de Thomash UTC, pero toma en cuenta el horario de verano.

>>> import time 
>>> offset = time.timezone if (time.localtime().tm_isdst == 0) else time.altzone 
>>> offset/60/60 * -1 
-9 

El valor de time.timezone o time.altzone es en cuestión de segundos al oeste de UTC (con áreas del este de UTC conseguir un valor negativo). Esto es lo opuesto a cómo realmente nos gustaría, de ahí el * -1.

time.localtime().tm_isdst será cero si los ahorros de luz diurna no están vigentes actualmente (aunque esto puede no ser correcto si un área ha cambiado recientemente su ley de ahorro de luz natural).

EDITAR: marr75 es correcto, he editado la respuesta en consecuencia.

+1

Para estar seguro, creo que la verificación de compensación debe invertirse (altzone si dst = 1 else timezone). Si el estado del DST es de alguna manera desconocido, 'tm_isdst' será' -1', y el código actual sería 'altzone' en este caso. Para las regiones que no usan DST, este valor nunca es correcto, por lo que 'timezone' probablemente sea la alternativa. (No estoy seguro si '-1' es realmente posible salida de' localtime') – nmclean

+1

[toda la zona alterna, la solución basada en la zona horaria puede fallar en algunos casos extremos] (http://bugs.python.org/issue1647654) – jfs

11

Los fragmentos de código para calcular el desplazamiento son incorrectos, vea http://bugs.python.org/issue7229.

La forma correcta de manejar esto es:

def local_time_offset(t=None): 
    """Return offset of local zone from GMT, either at present or at time t.""" 
    # python2.3 localtime() can't take None 
    if t is None: 
     t = time.time() 

    if time.localtime(t).tm_isdst and time.daylight: 
     return -time.altzone 
    else: 
     return -time.timezone 

Esto es, con toda probabilidad, no es la pregunta exacta que el PO pidió, pero hay dos fragmentos incorrectos en la página y hora insectos chupan para rastrear y arregla

+0

1. si sabes 'tm_isdst'; no es necesario que compruebe 'daylight' 2. [todas las soluciones basadas en' altzone', 'timezone' pueden fallar en algunos casos extremos] (http://bugs.python.org/issue1647654) – jfs

Cuestiones relacionadas