我有一個程序在當地時間(以色列)接收日期時間字符串,我需要將它轉換爲紀元秒。在Python中將當地時間轉換爲GMT時間
我想我可以使用諸如「UTC +02:00」之類的格式,但問題是,在日間節省下,以色列手錶的表現與其他國家不同。有沒有辦法讓時代依賴於國家?
我有一個程序在當地時間(以色列)接收日期時間字符串,我需要將它轉換爲紀元秒。在Python中將當地時間轉換爲GMT時間
我想我可以使用諸如「UTC +02:00」之類的格式,但問題是,在日間節省下,以色列手錶的表現與其他國家不同。有沒有辦法讓時代依賴於國家?
Python不包含除基類tzinfo之外的任何內置時區類,這是無用的。您需要安裝另一個軟件包,如pytz。
請注意,當夏令時發生變化時,當同一時間發生兩次時,您將遇到模糊的當地時間問題。如果您可以使用UTC存儲和傳輸時間,並且只在顯示時進行轉換,那將是最佳選擇。我意識到這並不總是可能的。
> 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
是的,有。 pytz
模塊合併了政治時區的Olson database,並允許您構建本地時間對象並在時區之間進行轉換。你可以按名稱查找時區。 UTC是Etc/UTC
。
知道是否調整爲夏令時,使用:
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)
'time.daylight'不會幫助你在這裏。 'time.mktime()'試圖猜測DST本身的輸入本地時間('strptime()'設置'is_dst = -1')。在DST更改過程中,有50%的時間可能是錯誤的。 – jfs
退房datetime模塊 –