2010-01-24 76 views
3

我正在Python中使用日誌類型的應用程序。該應用程序基本上允許用戶在日誌中寫入條目,並添加一個時間戳以供日後查詢日誌。在Python中易於使用時間戳

截至目前,我使用time.ctime()函數生成視覺友好的時間戳。日記條目因此看起來像:

Thu Jan 21 19:59:47 2010 Did something 
Thu Jan 21 20:01:07 2010 Did something else 

現在,我想能夠使用這些時間戳來做一些搜索/查詢。例如,我需要搜索「2010」,「2010年二月」或「2010年二月二十三日」。

我的問題是:

1)什麼時間模塊(S)我應該使用:time VS datetime

2)什麼是創建和使用時間戳對象的適當方式?

非常感謝!

回答

7

選項1:不要改變任何東西。使用time.strptime解析您的時間戳。選項2:更改爲datetime。您可以用相同的方式格式化時間戳,並使用datetime.strptime來解析它們。

它並不重要,因爲代碼會類似。搜索將涉及匹配幾個月,幾天或幾年或一些這樣的。爲此,使用time元組。或datetime.datetime對象。或者,搜索將涉及比較時間範圍;在此使用time秒。或使用datetime對象。他們都會工作,而且 - 爲此 - 他們在複雜性上會相似。

做日期計算(未來90天,過去3個月等)是datetime的強力訴訟。

一般來說,你會經常更喜歡datetime,因爲它做的更多,並且不涉及簡單的雙重時間和時間元組時間之間的切換。

+0

感謝您的回覆。我會把時間放在日期時間文檔上。 – Morlock 2010-01-24 15:24:50

9

您可能要考慮更改爲ISO 8601。將有助於排序或在不同系統之間傳輸數據。

+0

完全同意。這樣可讀性更強,並且在使用不同工具時也不會引起大驚小怪。 – rytis 2010-01-24 16:05:02

+0

我將在日誌文件中使用ISO 8601,並感謝日誌中的建議!然而,這個問題真的是一個問題,我應該使用哪個python模塊來處理日期和時間。如果您有辦法使用標準庫中的python模塊實現ISO 8601,我很樂意聽到它! Cheers – Morlock 2010-01-24 19:13:43

+1

下面是一個相反的問題,用Python中的日期時間模塊解析ISO 8601:http://stackoverflow.com/questions/969285/how-do-i-translate-a-iso-8601-datetime-string- into-a-python-datetime-object - 注意查看datetime.datetime方法而不是datetime模塊本身的註釋。如果你幸運的話,你會發現一個接受相同(或非常相似)格式語法的strftime()函數。我似乎記得我曾經做過這樣的事情,而我唯一需要做的事情就是在小數秒(這是當時我的應用程序需要它們)時進行的。 – 2010-01-24 20:18:21