2012-11-08 61 views
8

我有一個包含像這樣」Python中減去兩個日期字符串

start_date = 'Sun Sep 16 16:05:15 +0000 2012' 
end_date = 'Sun Sep 17 23:55:20 +0000 2012' 

我需要執行的日期兩個字符串:end_date - start_date 應該返回秒分離到底有多少,並開始日期

這些數據是從twitter api中提取的,這是json給我的,因爲它看起來像一個常用的字符串,我認爲有一個庫或方法可以處理這個問題,我只是無法找到它。

回答

10

以下是完整的答案:

from datetime import datetime 

start_date = 'Sun Sep 16 16:05:15 +0000 2012' 
end_date = 'Sun Sep 17 23:55:20 +0000 2012' 


def __datetime(date_str): 
    return datetime.strptime(date_str, '%a %b %d %H:%M:%S +0000 %Y') 

start = __datetime(start_date) 
end = __datetime(end_date) 

delta = end - start 
print delta # prints: 1 day, 7:50:05 
print delta.total_seconds() # prints: 114605.0 
+0

您的解決方案不會返回寫入的正確秒數。您需要將每天的秒數添加到delta.seconds。總的秒數是((delta.days * 86500)+ delta.seconds) –

+0

你是對的!我更改了代碼以使用.total_seconds()方法 – sphere

3

你看起來有多難?

Python的datetime模塊將解析這種格式,並讓您對結果對象進行算術運算。

這裏的示例代碼:

a = datetime.datetime.strptime("Sun Sep 16 16:05:15 +0000 2012", "%a %b %d %H:%M:%S +0000 %Y") 

注意,在Windows(其中我試過以上)時,%z指令似乎不支持,這就是爲什麼+0000一部分是硬編碼。如果你期望這部分(UTC抵消)有所不同,你需要在一個單獨的步驟中處理,除非你可以驗證%z適合你。

2

使用datetime.strptime方法將字符串轉換爲datetime對象。你可以在這裏找到所需的格式:http://docs.python.org/2/library/datetime.html#strftime-strptime-behavior

你的情況:

%語言環境的縮寫工作日名稱。
%b語言環境的縮寫月份名稱。
%d月份中的一天作爲十進制數[01,31]。
%H小時(24小時制)作爲十進制數[00,23]。
%M作爲十進制數分鐘[00,59]。
%秒作爲十進制數[00,61]。
%Y作爲十進制數的世紀。
%UTC格式+ HHMM或-HHMM(如果對象是天真的,則爲空字符串)。

1

的日期控制)方法可以分析使用datetime.datetime.strptime(日期,那麼你可以做算術操作?

2

使用datetime.strptime()根據格式代碼解析字符串。在你的情況下,格式將是類似於"%a %b %d %H:%M:%S %z %Y"。 (注:我沒有測試此解析格式。)

詳情:http://docs.python.org/2/library/datetime.html#strftime-strptime-behavior

然後你就可以減去datetime對象並獲取timedelta對象。

或者,你可以使用Twitter的開發者頁面上列出的Python的Twitter的API包裝的一個,這可能爲你做轉換:https://dev.twitter.com/docs/twitter-libraries#python

+0

是不是'datetime.datetime.strptime()'? – tehmisvh

0

從日期時間import datetime

start_date = 'Sun Sep 16 16:05:15 +0000 2012' 
end_date = 'Sun Sep 17 23:55:20 +0000 2012' 


def __datetime(date_str): 
    return datetime.strptime(date_str, '%a %b %d %H:%M:%S +0000 %Y') 

start = __datetime(start_date) 
end = __datetime(end_date) 

delta = end - start 
print(delta) 
print(delta.total_seconds()) 

hours = (delta.total_seconds())/3600 

print("Hours %s" % hours) 

minutes = (delta.total_seconds())//3600 

print("minutes %s" % minutes) 
print(divmod(delta.total_seconds(), 3600)) 

h, m = divmod(delta.total_seconds(), 3600) 

print(h) 
print(m) 

M, s = divmod(m, 60) 
print(M) 
print(s)