2012-06-12 10 views
9

Chcę przekonwertować czas GMT na czas EST i uzyskać znacznik czasu. Próbowałem następujące, ale nie wiem, jak ustawić strefę czasową.Jak przekonwertować czas GMT do czasu EST za pomocą python

time = "Tue, 12 Jun 2012 14:03:10 GMT" 
timestamp2 = time.mktime(time.strptime(time, '%a, %d %b %Y %H:%M:%S GMT')) 
+7

Nie ma mowy, że napisany przez Ciebie kod działa w ogóle, ponieważ nazwałeś ciąg 'time', a następnie próbowałeś użyć funkcji z pakietu' time', który nie jest już dostępny pod tą nazwą. – geoffspear

Odpowiedz

20

Strefy czasowe nie są wbudowane w standardowy język Python - należy użyć innej biblioteki. pytz to dobry wybór.

>>> gmt = pytz.timezone('GMT') 
>>> eastern = pytz.timezone('US/Eastern') 
>>> time = "Tue, 12 Jun 2012 14:03:10 GMT" 
>>> date = datetime.datetime.strptime(time, '%a, %d %b %Y %H:%M:%S GMT') 
>>> date 
datetime.datetime(2012, 6, 12, 14, 3, 10) 
>>> dategmt = gmt.localize(date) 
>>> dategmt 
datetime.datetime(2012, 6, 12, 14, 3, 10, tzinfo=<StaticTzInfo 'GMT'>) 
>>> dateeastern = dategmt.astimezone(eastern) 
>>> dateeastern 
datetime.datetime(2012, 6, 12, 10, 3, 10, tzinfo=<DstTzInfo 'US/Eastern' EDT-1 day, 20:00:00 DST>) 
3

Korzystanie pytz

from datetime import datetime 
from pytz import timezone 
fmt = "%Y-%m-%d %H:%M:%S %Z%z" 
now_time = datetime.now(timezone('US/Eastern')) 
print now_time.strftime(fmt) 
0

Jeśli jest to twój lokalny stref czasowych oraz zasady strefy czasowej są takie same dla danego czasu, ponieważ są one teraz następnie można użyć roztworu stdlib tylko (z wyjątkiem niektórych krawędzi przypadków):

#!/usr/bin/env python 
from email.utils import parsedate_tz, mktime_tz 
from datetime import datetime 

timestamp = mktime_tz(parsedate_tz("Tue, 12 Jun 2012 14:03:10 GMT")) 
print(datetime.fromtimestamp(timestamp)) 
# -> 2012-06-12 10:03:10 

W przeciwnym razie potrzebujesz danych z historycznej bazy danych strefy czasowej, aby uzyskać poprawne przesunięcie utc. pytz module zapewnia dostęp do the tz database:

#!/usr/bin/env python 
from email.utils import parsedate_tz, mktime_tz 
from datetime import datetime 
import pytz # $ pip install pytz 

timestamp = mktime_tz(parsedate_tz("Tue, 12 Jun 2012 14:03:10 GMT")) 
eastern_dt = datetime.fromtimestamp(timestamp, pytz.timezone('America/New_York')) 
print(eastern_dt.strftime('%a, %d %b %Y %H:%M:%S %z (%Z)')) 
# -> Tue, 12 Jun 2012 10:03:10 -0400 (EDT) 

Uwaga: POSIX timestamp jest taka sama na całym świecie, czyli lokalna strefa czasowa nie ma znaczenia, jeśli chcesz znaleźć znacznik czasu (chyba, że ​​strefa czasowa jest „prawo” rodzaj) . Oto jak wykonać convert a utc time to the timestamp.

Powiązane problemy