2012-01-10 13 views
9

Necesito convertir la hora UTC, (en la instancia de ec2) a PST. Estoy tratando de hacer esto.necesito convertir UTC (aws ec2) a PST en python

from datetime import datetime 
from pytz import timezone 
import pytz 

date_format='%m/%d/%Y %H:%M:%S %Z' 
date = datetime.now() 
print 'Current date & time is:', date.strftime(date_format) 

my_timezone=timezone('US/Pacific') 

date = my_timezone.localize(date) 
date = date.astimezone(my_timezone) 

print 'Local date & time is :', date.strftime(date_format) 

Pero la salida es:

Current date & time is: 01/10/2012 20:01:14 
Local date & time is : 01/10/2012 20:01:14 PST 

Cualquier razón por la que no estoy recibiendo la derecha tiempo PST?

Respuesta

14
from datetime import datetime 
from pytz import timezone 
import pytz 

date_format='%m/%d/%Y %H:%M:%S %Z' 
date = datetime.now(tz=pytz.utc) 
print 'Current date & time is:', date.strftime(date_format) 

date = date.astimezone(timezone('US/Pacific')) 

print 'Local date & time is :', date.strftime(date_format) 

parece funcionar para mí :) - zonas horarias son confusas, poco a poco haciendo un plan de lo que realmente quiero hacer me ayuda la mayor parte del tiempo

+1

Gracias amigo, las zonas horarias son dolor en la espalda, ¡la luz del día es aún más un dolor de cabeza! – Nish

+0

Gracias por esto. Difícil de encontrar un simple ejemplo. Conseguí esto trabajando en el motor de la aplicación de google con esto: gaepytz. El código anterior funciona igual, solo importa cambios de texto. –

+0

He votado negativamente esta pregunta y respuesta porque estoy bastante seguro de que es incorrecta para cualquiera que realmente quiera "PST". Pacific-New produce la hora local del Pacífico, no la hora estándar. No hay diferencia para la fecha de enero citada, pero sería un problema en el verano. –

3

Creo que quiere datetime.utcnow() si está intentando simular la hora UTC en su ejemplo.

El otro problema es que, de manera predeterminada, el objeto no tiene zona horaria. Esto no quiere decir que sea UTC, y creo que pytz solo está incumpliendo el tiempo local para ese objeto. Debe crear un nuevo objeto datetime con la zona horaria configurada como UTC antes de intentar convertirlo a PST.

Puede hacerlo a través de

date = datetime.utcnow() 
date.replace(tzinfo=pytz.utc) 
+0

Gracias Micheal. Supuse que la fecha tiene una zona horaria predeterminada. Solucionó el problema. – Nish

+0

Gracias, cuando podemos obtener el tiempo en UTC directamente, podemos evitar la conversión de pytz a menos que sea necesario. – shahjapan

2

Al llamar al localize usted dice en qué hora es TZ. Entonces, en su ejemplo usted dice que su fecha está en PST, luego llama al astimezone para PST y obtiene el mismo tiempo que se espera. Usted probablemente necesitará lo siguiente:

utc_dt = pytz.utc.localize(datetime.utcnow()) 
pst_tz = timezone('US/Pacific') 
pst_dt = pst_tz.normalize(utc_dt.astimezone(pst_tz)) 
pst_dt.strftime(fmt) 

En este momento, no se puede comprobar si este código se ejecuta - no tienen esta biblioteca en la estación de trabajo.

+0

Gracias. ¡Funciona genial! – Nish

0

si desea calcular el tiempo de actividad actual basado en launchtime de una instancia EC2, uno puede intentar esto:

import datetime 
lt_datetime = datetime.datetime.strptime(inst.launch_time, '%Y-%m-%dT%H:%M:%S') 
lt_delta = datetime.datetime.utcnow() - lt_datetime 
str(lt_delta) 
1

hacer esto en una sola línea:

>>> import pytz 
>>> pytz.utc.localize(datetime.utcnow()).astimezone(pytz.timezone('US/Pacific')) 
datetime.datetime(2016, 5, 16, 10, 58, 18, 413399, tzinfo=<DstTzInfo 'US/Pacific' PDT-1 day, 17:00:00 DST>) 
+0

Esto realmente me ayuda. Estaba luchando con la zona horaria desde 2 horas. –

Cuestiones relacionadas