2014-03-25 77 views
0

我在將以下時間從東部轉換爲UTC/GMT時出現了一個奇怪的問題。有人可以建議嗎?東部和格林威治標準時間之間的轉換錯誤

>>> import datetime 
>>> import pytz 
>>> 
>>> ept_time = datetime.datetime(2014,03,21,7) # March 21st at 7am 
>>> ept_time = ept_time.replace(tzinfo=pytz.timezone('US/Eastern')) 
>>> print ept_time 
2014-03-21 07:00:00-05:00 
>>> 
>>> gmt_time = pytz.utc.normalize(ept_time) 
>>> print gmt_time 
2014-03-21 12:00:00+00:00 
>>> 

然而,根據Wolfram Alpha,結果應該是上午11點,而不是12

+1

你東部時間沒有正確轉換。我們在夏令時,所以最後應該是'-04:00'。也許這樣會有所幫助:>>> before = loc_dt - timedelta(minutes = 10) >>> before.strftime(fmt) '2002-10-27 00:50:00 EST-0500' >> > eastern.normalize(before).strftime(fmt) '2002-10-27 01:50:00 EDT-0400' >>> after = eastern.normalize(before + timedelta(minutes = 20)) >> > after.strftime(fmt) '2002-10-27 01:10:00 EST-0500'' – acushner

+0

可能重複的[如何將GMT時間轉換爲使用python的EST時間](http://stackoverflow.com/questions/10999021/how-to-convert-gmt-time-to-est-time-using-python) – 2rs2ts

+0

@ 2rs2ts:這是相反的方向。 EST - > GMT,而不是GMT - > EST。 – jfs

回答

4
>>> gmt = pytz.timezone('GMT') 
>>> eastern = pytz.timezone('US/Eastern') 
>>> d = datetime.datetime(2014,03,21,7) 
>>> dateeastern = eastern.localize(d) 
>>> dateeastern 
datetime.datetime(2014, 3, 21, 7, 0, tzinfo=<DstTzInfo 'US/Eastern' EDT-1 day, 20:00:00 DST>) 
>>> dategmt = dateeastern.astimezone(gmt) 
>>> dategmt 
datetime.datetime(2014, 3, 21, 11, 0, tzinfo=<StaticTzInfo 'GMT'>) 

與UTC更換GMT:

>>> eastern = pytz.timezone('US/Eastern') 
>>> d = datetime.datetime(2014,03,21,7) 
>>> dateeastern = eastern.localize(d) 
>>> dateeastern 
datetime.datetime(2014, 3, 21, 7, 0, tzinfo=<DstTzInfo 'US/Eastern' EDT-1 day, 20:00:00 DST>) 
>>> dateutc = dateeastern.astimezone(pytz.utc) 
>>> dateutc 
datetime.datetime(2014, 3, 21, 11, 0, tzinfo=<UTC>) 

編號:How to convert GMT time to EST time using python

+0

謝謝。 'localize'與使用日期時間的'replace()'方法有什麼不同? – jsexauer

+0

斷言輸入時間是明確的,將'is_dst = None'傳遞給'.localize()'。一般來說,pytz文檔建議'.normalize()':'dategmt = gmt.normalize(dateeastern.astimezone(gmt))'(儘管在這種情況下可能不需要)。 – jfs

+0

@jsexauer:注意:在[pytz docs](http://pytz.sourceforge.net/)中推薦'.localize()'。簡而言之,相同的時區在過去可能有不同的utc偏移量(與DST轉換無關),'.replace()'可能會選擇錯誤的偏移量 – jfs

相關問題