2016-05-29 37 views
0

我有兩個字符串像這樣的:處理在strptime時區在Python

"Sun 10 May 2015 13:54:36 -0700" 
"Sun 10 May 2015 13:54:36 +0000" 

(最後一部分是時區-0700意味着比GMT少7小時)
我的目的是把它轉化爲一個UNIX時間戳很容易找到它們的絕對差異。

我的問題是有一種內置的方法將這些格式化文本轉換爲Unix時間戳?還是有一個直接計算兩個這樣的字符串的差異?

編輯: 該課題從This one不同,因爲這個問題不包括時區並沒有回答有關時區的這個問題提到任何東西任何。

+0

@schwobaseggl我找不到我在答案中的答案你提到過,因爲沒有人告訴過有關時區的任何事情:-( – FazeL

+2

http://stackoverflow.com/questions/1101508/how-to-parse-dates-with-0400-timezone-string-in-python ? – schwobaseggl

+0

@schwobaseggl dateutil看起來很完美,但它沒有與python標準庫捆綁在一起,我會正確編輯問題。 – FazeL

回答

0

這應該在Python 3的工作以上但不&已知在所有平臺上工作有關Python 2.

date_str = "Sun 10 May 2015 13:54:36 -0700" 
pattern = '%a %d %B %Y %H:%M:%S %z' 
dt = int(time.mktime(time.strptime(date_str ,pattern))) 
print(dt) 

對於,Python的2.7+,(無%z

import datetime 
date_str = "Sun 10 May 2015 13:54:36 -0700" 

dt_str = date_str[:-5].strip() 
dt_zone = int(date_str[-5:])/100 
pattern = '%a %d %B %Y %H:%M:%S' 

dtobj = datetime.datetime.strptime(dt_str ,pattern) 
dt = dtobj + datetime.timedelta(hours=dt_zone) 
print(dt.strftime('%s')) 
+0

@Fazel沒有工作? – Vishwa

+0

Python 2解決方案不適用於帶小數小時偏移量的時區。 –

+0

此外,你還有一個額外的地帶 –

0

此代碼回答你的問題:

from datetime import timedelta, datetime, tzinfo 
date1="Sun 10 May 2015 13:54:36 -0700" 

date2=date1[4:-6] 

zone = int(date1[-5:])/100 

d=datetime.strptime(date2, "%d %B %Y %H:%M:%S") 

class TZ(tzinfo): 
    def utcoffset(self, dt): return timedelta(hours=zone) 

d=datetime(d.year, d.month, d.day,d.hour,d.minute,d.second, tzinfo=TZ()).isoformat(' ') 


print d 
+0

即使它工作,編碼國際海事組織是非常可疑的,包括丟棄原始偏移的分鐘和使用全局變量作爲默認值的方法.. – martineau

+0

什麼正在編碼IMO –

+1

在我看來。另一個答案也有類似的問題。 – martineau