2011-03-12 68 views
6

Quiero convertir la hora actual a +0900 en Python.Python: Convertir hora local a otra zona horaria

¿Cuál es la forma adecuada de hacerlo (suponiendo en el módulo de tiempo)?

He leído que esto no está incluido en Python y tienes que usar algo como pytz.

No quiero cambiarlo en un servidor o globalmente, solo en esta instancia.

Respuesta

6

En su lugar, puede usar el datetime module. Adaptado de http://docs.python.org/library/datetime.html#datetime.tzinfo.fromutc

from datetime import tzinfo, timedelta, datetime 

class FixedOffset(tzinfo): 
    def __init__(self, offset): 
     self.__offset = timedelta(hours=offset) 
     self.__dst = timedelta(hours=offset-1) 
     self.__name = '' 

    def utcoffset(self, dt): 
     return self.__offset 

    def tzname(self, dt): 
     return self.__name 

    def dst(self, dt): 
     return self.__dst 

print datetime.now() 
print datetime.now(FixedOffset(9)) 

Da:

2011-03-12 00:28:32.214000 
2011-03-12 14:28:32.215000+09:00 

Cuando lo ejecuto (soy UTC-0500 para otro día, a continuación, comienza el horario de verano)

+0

Gracias. ¡Gran respuesta! También puede agregar 'print datetime.utcnow()' para mostrar la imagen completa de las horas: su hora local, UTC y desplazada. –

0

En el módulo datetime, hay una clase base abstracta llamada tzinfo que controla cómo datetime.datetime y datetime.time manejan zonas horarias. Básicamente, deriva su propia clase para controlar la interpretación de la zona horaria. Nunca lo he usado personalmente, así que no puedo decir mucho más al respecto.

Desafortunadamente, los únicos controles de zona horaria que veo directamente en el módulo time funcionan globalmente, creo.

9

Quiero convertir la corriente tiempo a +0900 en Python ...
No quiero cambiarlo en un servidor o globalmente, solo en esta instancia.

para obtener la hora actual de desplazamiento de UTC +0900 zona horaria:

from datetime import datetime, timedelta 

current_time_in_utc = datetime.utcnow() 
result = current_time_in_utc + timedelta(hours=9) 

No utilice objetos de fecha y hora conscientes a menos que también uso de la biblioteca pytz de lo contrario podría obtener resultados incorrectos debido a transiciones de horario de verano y otra zona horaria cambios. Si necesita hacer algunos aritméticos en objetos datetime; convertirlos a UTC primero.

+0

Esto es EXACTAMENTE lo que necesitaba, también. ¡Gracias! – Tensigh

1

Sólo en caso de que puede utilizar pytz y otros módulos externos, esta es una solución recta hacia adelante más

pip install pytz tzlocal 

entonces

from datetime import datetime 
from pytz import timezone 
import pytz 
from tzlocal import get_localzone 

#timezones 
local = get_localzone() 
utc = pytz.utc 
cet = timezone('CET') 

#get now time in different zones 
print(datetime.now(local)) 
print(datetime.now(cet)) 
print(datetime.now(utc)) 

#convert local time now to CET 
print(datetime.now(local).astimezone(cet)) 
print(datetime.now(cet).astimezone(utc)) 
7

Ejemplo para convertir datos de UTC a IST

from datetime import datetime 
from pytz import timezone 

format = "%Y-%m-%d %H:%M:%S %Z%z" 

# Current time in UTC 
now_utc = datetime.now(timezone('UTC')) 
print now_utc.strftime(format) 
Output: 2015-05-18 10:02:47 UTC+0000 

# Convert to Asia/Kolkata time zone 
now_asia = now_utc.astimezone(timezone('Asia/Kolkata')) 
print now_asia.strftime(format) 
Output: 2015-05-18 15:32:47 IST+0530 
+0

Gracias. Usted dice 'Asia/Kolkata', pero ¿cómo puedo ver una lista de cadenas de zonas horarias aceptables, por ejemplo, Asia/Japón? – f126ck

+0

Quiero decir, ¿hay un comando withoin pytz que imprima todas las cadenas de zona horaria disponibles? – f126ck

+0

me encontré 'print (pytz.all_timezones)' – f126ck

Cuestiones relacionadas