2011-11-07 88 views
0

我有一個程序在當地時間(以色列)接收日期時間字符串,我需要將它轉換爲紀元秒。在Python中將當地時間轉換爲GMT時間

我想我可以使用諸如「UTC +02:00」之類的格式,但問題是,在日間節省下,以色列手錶的表現與其他國家不同。有沒有辦法讓時代依賴於國家?

+0

退房datetime模塊 –

回答

0

Python不包含除基類tzinfo之外的任何內置時區類,這是無用的。您需要安裝另一個軟件包,如pytz

請注意,當夏令時發生變化時,當同一時間發生兩次時,您將遇到模糊的當地時間問題。如果您可以使用UTC存儲和傳輸時間,並且只在顯示時進行轉換,那將是最佳選擇。我意識到這並不總是可能的。

5
> import pytz 
> pytz.country_timezones['il'] # Israel 

['Asia/Jerusalem'] 

這是否描述您的時區?

如果是的話,那麼你可以使用:

from datetime import datetime 
import pytz 

a = "2011-11-07 12:34:56" 
dt = pytz.timezone('Asia/Jerusalem').localize(datetime.strptime(a, '%Y-%m-%d %H:%M:%S')).astimezone(pytz.utc) 

dt現在datetime.datetime(2011, 11, 7, 10, 34, 56, tzinfo=<UTC>),這是 「2011-11-07 12:34:56」(耶路撒冷)。 (1970-01-01以來UTC 00:00:00 Unix時間戳,即秒)

爲了將其轉換爲劃時代秒,你可以直接使用:

import calendar 
from datetime import datetime 
import pytz 

a = "2011-11-07 12:34:56" 
epoch = calendar.timegm(pytz.timezone('Asia/Jerusalem').localize(datetime.strptime(a, '%Y-%m-%d %H:%M:%S')).utctimetuple()) 

# epoch is 1320662096 
0

是的,有。 pytz模塊合併了政治時區的Olson database,並允許您構建本地時間對象並在時區之間進行轉換。你可以按名稱查找時區。 UTC是Etc/UTC

0

知道是否調整爲夏令時,使用:

time.daylight 

這似乎爲我工作:

>>> time.gmtime(time.mktime(time.strptime("7 Nov 2011 12:12:12", "%d %b %Y %H:%M:%S"))) 
time.struct_time(tm_year=2011, tm_mon=11, tm_mday=7, tm_hour=19, tm_min=12, tm_sec=12, tm_wday=0, tm_yday=311, tm_isdst=0) 
+0

'time.daylight'不會幫助你在這裏。 'time.mktime()'試圖猜測DST本身的輸入本地時間('strptime()'設置'is_dst = -1')。在DST更改過程中,有50%的時間可能是錯誤的。 – jfs

相關問題