1. 程式人生 > >Python 時間戳和日期相互轉換

Python 時間戳和日期相互轉換

sds 工作 num 一定的 方便 number http times time

 轉載地址:http://liyangliang.me/posts/2012/10/python-timestamp-to-timestr/

  在寫Python的時候經常會遇到時間格式的問題,每次都是上 google 搜索然後找別人的博客或網站來參考。現在自己簡單總結一下,方便以後查詢。

  首先就是最近用到的時間戳(timestamp)和時間字符串之間的轉換。所謂時間戳,就是從 1970 年 1 月 1 日 00:00:00 到現在的秒數。那關於為什麽是1970年這個特殊的日期,這篇文章有個簡單明了的介紹:

為什麽計算機時間要從1970年1月1日開始算起?

  在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/

Python 時間戳和日期相互轉換