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
參考資料
- 這篇寫得超詳細的, 作者以 datetime 為主: Date and Time Representation in Python
- 官網文件: 15.3. time — Time access and conversions
- 官網文件: 8.1. datetime — Basic date and time types
- 內建模組只有提供 timezone 的 abstract class, 沒提供各時區的實作 class, 不過 pytz 實作了全部的時區和轉換程式。暫時用不到時區相關的操作, 先備忘。
- dateutil 提供 parse 函式, 可以將各種字串格式轉成 datetime, 省去自己組 strptime 的 format 步驟。當輸入格式不一時, 非常好用。
備註
- MySQL 用 FROM_UNIXTIME 將 timestamp (存成 Int) 轉為字串; 用 UNIX_TIMESTAMP 將字串轉為整數。
2015/01/05 更新
- sqlite3 沒有 timestamp 或其它 time 類型的欄位, 所以要用 integer 才行
- Python 沒有定義 time.time() 會傳回 UTC 時間, 保險起見, 這麼做才能確保傳回 UTC 時間的 timestamp:
def get_current_timestamp_in_utc(): d = datetime.datetime.utcnow() epoch = datetime.datetime(1970,1,1) return (d - epoch).total_seconds()
然後要用 datetime.datetime.utcfromtimestamp(utc_timestamp).strftime('...') 轉成字串。
2015/08/28 更新
>>> 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。
沒有留言:
張貼留言