2010年11月16日 星期二

Python 處理時間的方法

基於效率考量, 我決定在 mysql 中用 unix timestamp 的方式表示時間。另一方面, 加減時間也比較直覺, 都是秒數。這裡簡記 timestamp 和字串互轉的方式。

timestamp 轉為字串

In [1]: import time
In [2]: import datetime
In [3]: t = time.time()
In [4]: # 透過 datetime
In [5]: datetime.datetime.fromtimestamp(t).strftime('%Y-%m-%d %H:%M:%S')
Out[5]: '2010-11-16 20:10:58'
In [6]: # 透過 time tuple
In [7]: time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(t))
Out[7]: '2010-11-16 20:10:58'

字串轉為 timestamp

In [8]: # 透過 datetime
In [9]: d = datetime.datetime.strptime('2010-11-16 20:10:58', '%Y-%m-%d %H:%M:%S')
In [10]: time.mktime(d.timetuple()) + 1e-6 * d.microsecond
Out[10]: 1289909458.0
In [11]: # 透過 time tuple
In [12]: time.mktime(time.strptime('2010-11-16 20:10:58', '%Y-%m-%d %H:%M:%S'))
Out[12]: 1289909458.0

參考資料

備註

2015/01/05 更新

2015/08/28 更新

Parse email 時間欄位的方法:

>>> from email.utils import parsedate_tz, mktime_tz, formatdate
>>> import time
>>> date = 'Tue, 28 Aug 2012 02:49:13 -0500'
>>> tt = parsedate_tz(date)
>>> timestamp = mktime_tz(tt)
>>> print formatdate(timestamp)
Tue, 28 Aug 2012 07:49:13 -0000

或試看看萬能版 parser, 不需指定時間格式: python-dateutil

沒有留言:

張貼留言

在 Fedora 下裝 id-utils

Fedora 似乎因為執行檔撞名,而沒有提供 id-utils 的套件 ,但這是使用 gj 的必要套件,只好自己編。從官網抓好 tarball ,解開來編譯 (./configure && make)就是了。 但編譯後會遇到錯誤: ./stdio.h:10...