程式扎記: [ Python 文章收集 ] 時間信息的獲取與表示簡介

標籤

2012年2月6日 星期一

[ Python 文章收集 ] 時間信息的獲取與表示簡介

參考自 這裡 
前言 : 
底下針對 Python 模組 time 的常用函數提供簡單說明與範例. 

範例說明 : 
我們先導入必須用到 time module : 
>>> import time

接著設置一個時間的格式,後面會用到. 
>>> ISOTIMEFORMAT='%Y-%m-%d %X'

看一下當前的時間,和其他很多語言相似這是從epoch(1970年1月1日00:00:00)開始到當前的秒數 : 
>>> time.time()
1328515999.922

這樣的格式可讀性差,換個格式來看看 : 
>>> time.localtime()
time.struct_time(tm_year=2012, tm_mon=2, tm_mday=6, tm_hour=16, tm_min=13, tm_sec=27, tm_wday=0, tm_yday=37, tm_isdst=0)

localtime() 返回 tuple 格式的時間,有一個和它類似的函數叫 gmtime() ,2個函數的差別是時區,gmtime() 返回的是0時區的值,localtime返回的是當前時區的值. 
透過 time.strftime() 可以根據自訂格式列印時間 : 
>>> time.strftime(ISOTIMEFORMAT, time.localtime())
'2012-02-06 16:14:23'
>>> time.strftime(ISOTIMEFORMAT, time.gmtime())
'2012-02-06 08:36:56'

查看時區可以使用 time.timezone() : 
>>> time.timezone
-28800 # 上面的值是一個秒值,是當前時區和0時區相差的描述,-28800=-8*3600

有些時候你有的時間差, 而不是特定時間, 你可能想知道這個時間總共多少小時, 多少分與多少秒, 你可以參考下面簡單代碼達成你的目的 : 
- timeStr.py :
  1. import time  
  2.   
  3. def timeStr(time):  
  4.     if time < 60:  
  5.         return "{0} sec".format(int(time))  
  6.     elif 60 < time < 3600:  
  7.         min = time / 60  
  8.         sec = time % 60  
  9.         return "{0} min {1} sec".format(int(min), int(sec))  
  10.     else:  
  11.         min = (time / 60) % 60  
  12.         sec = time % 60  
  13.         hr = time / 3600  
  14.         return "{0} hr {1} min {2} sec".format(int(hr), int(min), int(sec))  
  15.   
  16.   
  17. print(timeStr(39))  # 39 秒 = ?  
  18. print(timeStr(188))  # 188 秒 = ?  
  19. print(timeStr(9999))  # 9999 秒 = ?  
  20. btime = time.time()  # begin time  
  21. time.sleep(71)  # sleep 71 sec  
  22. stime = time.time() - btime # now - begin time = spending time  
  23. print(timeStr(stime))  

執行結果如下 : 
>python timeStr.py
39 sec
3 min 8 sec
2 hr 46 min 39 sec
 <--- 從這裡需要等待 71 秒.
1 min 11 sec

時間格式說明 : 
%a : 星期幾的簡寫Weekday name, abbr. 
%A : 星期幾的全稱Weekday name, full 
%b : 月分的簡寫Month name, abbr. 
%B : 月份的全稱Month name, full 
%c : 標準的日期的時間串Complete date and time representation 
%d : 十進製表示的每月的第幾天Day of the month 
%H : 24小時制的小時Hour (24-hour clock
%I : 12小時制的小時Hour (12-hour clock
%j : 十進制表示的每年的第幾天Day of the year 
%m : 十進製表示的月份Month number 
%M : 十時製表示的分鐘數Minute number 
%S : 十進制的秒數Second number 
%U : 每年的第幾週,把星期日做為第一天(值從0到53)Week number (Sunday first weekday
%w : 十進製表示的星期幾(值從0到6,星期天為0)weekday number 
%W : 每年的第幾週,把星期一做為第一天(值從0到53) Week number (Monday first weekday
%x : 標準的日期串Complete date representation (eg 13/01/08
%X : 標準的時間串Complete time representation (eg 17:02:10 ) 
%y : 不帶世紀的十進制年份(值從0到99)Year number within century 
%Y : 帶世紀部分的十制年份Year number 
%z,%Z : 時區名稱,如果不能得到時區名稱則返回空字符。Name of time zone 
%% : 百分號

沒有留言:

張貼留言

網誌存檔

關於我自己

我的相片
Where there is a will, there is a way!