2012-01-10 9 views
9

Potrzebuję konwersji czasu UTC (na instancję EC2) na PST. Próbuję to zrobić.Konwersja UTC (aws ec2) do PST w pythonie

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) 

ale wyjście jest:

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

Każdy powód dlaczego nie otrzymuję czasu PST prawo?

Odpowiedz

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) 

wydaje się działać dla mnie :) - czasowe są mylące, powoli podejmowania plan co ja właściwie chce zrobić mi pomaga większość czasu

+1

Dzięki, kolego, czasy są bólem w plecach, oszczędności na świetle dziennym to jeszcze większy ból głowy! – Nish

+0

Dzięki za to. Trudno znaleźć prosty przykład. Zrobiłem to działając na silniku aplikacji Google: gaepytz. Powyższy kod działa tak samo, tylko importuje zmiany tekstu. –

+0

Głosowałem za odrzuceniem tego pytania i odpowiedzi, ponieważ jestem prawie pewien, że jest to nieprawidłowe dla każdego, kto naprawdę chce "PST". Pacific-New produkuje lokalny czas pacyficzny, a nie standardowy. Nie ma różnicy w stosunku do podanej daty stycznia, ale byłby to problem w lecie. –

3

Myślę, że chcesz datetime.utcnow(), jeśli próbujesz symulować czas UTC w swoim przykładzie.

Inną kwestią jest to, że domyślnie obiekt nie ma strefy czasowej. Nie oznacza to, że jest to UTC, i myślę, że pytz domyślnie przyjmuje czas lokalny dla tego obiektu. Musisz utworzyć nowy obiekt datetime ze strefą czasową ustawioną jako UTC przed próbą przekonwertowania go na plik PST.

Można to zrobić poprzez

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

Thanks Micheal. Zakładam, że data ma domyślną strefę czasową. Naprawiono problem. – Nish

+0

Dzięki, gdy możemy uzyskać czas bezpośrednio w UTC - możemy uniknąć konwersji z pytz, chyba że jest to wymagane. – shahjapan

2

Dzwoniąc pod numer localize podajesz, w jakim TZ jest twój czas. Tak więc w twoim przykładzie mówisz, że twoja data jest w PST, wtedy zadzwonisz do astimezone dla PST i otrzymasz ten sam czas, który jest oczekiwany. Prawdopodobnie potrzebujesz:

Niestety, nie można sprawdzić, czy ten kod jest wykonywany - nie ma tej biblioteki na stacji roboczej.

+0

Dzięki. Działa świetnie! – Nish

0

jeśli chcesz obliczyć aktualny czas pracy w oparciu o launchtime z instancji EC2, można spróbować to:

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

Czy to w jednym wierszu:

>>> 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

To naprawdę pomaga mi wyjść. Zmagałem się ze strefą czasową od 2 godzin. –

Powiązane problemy