轉載地址:http://liyangliang.me/posts/2012/10/python-timestamp-to-timestr/
在寫Python的時候經常會遇到時間格式的問題,每次都是上 google 搜索然后找別人的博客或網站來參考。現在自己簡單總結一下,方便以后查詢。
首先就是最近用到的時間戳(timestamp)和時間字符串之間的轉換。所謂時間戳,就是從 1970 年 1 月 1 日 00:00:00 到現在的秒數。那關於為什么是1970年這個特殊的日期,這篇文章有個簡單明了的介紹:
在Python里,時間戳可以通過 time
模塊里的 time()
方法獲得,比如:
In [1]: import time In [2]: time.time() Out[2]: 1350816710.8050799
這個值對人來說是不友好的,所以有時候需要轉換為一定的格式方便人理解。我們可以調用 time.strftime()
函數來達到這個目的。根據 strftime()
函數的文檔,我猜這個名稱應該是 “string format time” 的簡寫,也就是字符串格式的時間。這個方法需要兩個參數,其中一個是時間格式,一個是一個9元組,第二個參數可選,默認為 time.localtime()
的返回值。而那個9元組其實是 struct_time
,由9個元素組成的元組(tuple),也是一種時間表示的格式。比如
In [5]: import time In [6]: time.localtime() Out[6]: time.struct_time(tm_year=2012, tm_mon=10, tm_mday=21, tm_hour=19, tm_min=4, tm_sec=25, tm_wday=6, tm_yday=295, tm_isdst=0)
具體的含義,前6個應該很明顯,那么后三個分別是:weekday(0-6),在一年中的第幾天(1-366),是否是夏令時(默認-1)。現在再來看看如何把時間戳轉換為指定格式的字符串形式。很簡單,直接上代碼
In [8]: import time In [9]: st = time.localtime(1350816710.8050799) In [10]: time.strftime('%Y-%m-%d %H:%M:%S', st) Out[10]: '2012-10-21 18:51:50'
先用 localtime()
把時間戳轉換為 struct_time
, 然后傳給 strftime
轉換為指定格式的字符串。那么反過來呢? 同樣需要先轉換為 struct_time
,這個工作由 time.strptime()
函數完成。strptime
中的 p
應該是 parse 的意思,原型是:
strptime(string, format) -> struct_time
把字符串形式的時間按照指定格式解析,轉換為 struct_time
。然后傳給time.mktime()
完成最后的工作,整個過程是:
In [12]: import time In [13]: st = time.strptime('2012-10-21 18:51:50', '%Y-%m-%d %H:%M:%S') In [14]: time.mktime(st) Out[14]: 1350816710.0
最后,有兩篇參考文章:
- Python中時間戳與時間字符串互相轉化: http://www.coder4.com/archives/2239
- Python中time模塊詳解(很好):http://qinxuye.me/article/details-about-time-module-in-python/