python時間-time模塊


  time是python自帶的模塊,用於處理時間問題,提供了一系列的操作時間的函數。

  以下說明針對於 python2.7,其他版本可能有所差異。

  模塊提供了兩個種表示時間的格式:

  1.時間戳,是以表示從“新紀元”到現在的時間,稱為 UTC 或者 GMT。這個“新紀元”指的就是1970年1月1日。所以時間戳指的就是從“新紀元”到某一個時間一共過去了多少秒,可能是一個整數,也可能是一個浮點數。至於為什么會這樣,有興趣的可以讀下這篇文章:戳這里

  2.一個包括 9 個元素的元祖,這 9 個元素分別為:

      year:4位數,表示年,例如:2016

      month:表示月份,范圍是 1-12

      day:表示天,范圍是 1-31

      hours:小時,范圍是 0-23

        minute:分鍾,范圍是 0-59

      seconds:秒,范圍是 0-59

        weekday:星期,范圍是 0-6,星期一是0,以此類推

      Julian day:是一年中的第幾天,范圍是 1-366

      DST:一個標志,決定是否使用夏令時(關於夏令時:戳這里),為 0 時表示不使用,為 1 時表示使用,為 -1 時,mktime() 方法會根據 date 和 time 來推測。一般情況下用不着。


FUNCTIONS

1. asctime([tuple]) -> string  

  將元祖格式的時間轉換成字符串格式。

例如: time.asctime((2016,5,11,12,30,50,5,163,0)) 

  

  如果 tuple 沒有給,將調用 localtime() 方法,獲取現在的時間。

 

2. clock() -> floating point number 

  這個有點特殊,會因系統的不同而不同,在 win 平台中,第一次調用,返回的是進程運行的實際時間。而第二次之后的調用時是第一次調用以后到這次調用時間。(實際上是以WIN32上QueryPerformanceCounter()為基礎,它比毫秒表示更為精確)

代碼示例:

import time

if __name__ == '__main__':
    time.sleep(1)
    print "clock1:%s" % time.clock()
    time.sleep(1)
    print "clock2:%s" % time.clock()
    time.sleep(1)
    print "clock3:%s" % time.clock()

 

輸出:

  所謂的進程運行的時間,我覺得更像運行第一次調用的這段代碼所需的時間,因為不管在第一次調用前用 sleep 停頓又或是進行一其他操作,其輸出變化也不大。

import time

if __name__ == '__main__':
    b = []
    for x in range(1000):
        b.append(x)
    time.sleep(1)
    print "clock1:%s" % time.clock()
    time.sleep(1)
    print "clock2:%s" % time.clock()
    time.sleep(1)
    print "clock3:%s" % time.clock()

 

  我也不知道是不是我理解錯誤還是其他,現在先這樣理解着,有問題我以后再改正。

  而在 Unix 系統中(雖然 win 也是由 unix 發展而來的),它返回的是“進程時間”,它是用秒表示的浮點數(時間戳)。

同樣的代碼,在CentOS6.7中運行:

其輸出為:

下面是一段實驗代碼:

import time,urllib


if __name__ == '__main__':
    print 'start at:',time.ctime()

    try:
        ur_open = urllib.urlopen('http://www.facebook.com')
    except:
        print 'error',time.ctime()
    time.sleep(1)
    print "clock1:%s" % time.clock()

    try:
        ur_open = urllib.urlopen('http://www.facebook.com')
    except:
        print 'error',time.ctime()
    time.sleep(1)
    print "clock2:%s" % time.clock()

    try:
        ur_open = urllib.urlopen('http://www.facebook.com')
    except:
        print 'error',time.ctime()
    time.sleep(1)
    print "clock3:%s" % time.clock()

  我試圖多次打開一個“不存在”的網站,看看所謂的“進程時間”是什么:

  可以看到我時間花費了1分多種,但是進程時間到最后卻只有 0.03 秒,參照這篇文章(戳這里),我覺得應該是進程占用 cpu 的時間,因為打開遠程網頁屬於遠程 I/O 操作,並不需要大量的 cpu 計算,所以進程時間就很短了。當然這是我的推測,暫時沒有找到相應的文章說明,就先這樣理解着吧,以后有錯再改。

 

3. ctime(seconds) -> string 

  將一個時間戳(默認為當前時間)轉換成一個時間字符串。相當於  asctime(localtime(seconds))

 

4. gmtime([seconds]) -> (tm_year, tm_mon, tm_mday, tm_hour, tm_min, tm_sec, tm_wday, tm_yday, tm_isdst) 

  將一個時間戳格式的轉換為UTC時區(0時區,中國為 UTC+8)的元祖格式。如果沒有給參數,則默認為本地時間。

  然而我實際的時間是14點,14 = 6 + 8。所以要注意下時區。

 

5.  localtime([seconds]) -> (tm_year,tm_mon,tm_mday,tm_hour,tm_min, tm_sec,tm_wday,tm_yday,tm_isdst) 

  將一個時間戳轉換為當前時區的元祖格式。如果沒有給參數,則默認為本地時間。

  

 

6. mktime(tuple) -> floating point number 

  將一個元祖格式的時間轉換為時間戳格式。

 

7. sleep(seconds) 

  線程將推遲指定的時間后運行,單位為秒。其精度為亞秒級。

  關於精度級別:

    分鍾級:以分鍾為單位,即速度按分鍾計算,7200轉/分
    秒級:以秒為單位,即速度按秒計算,1GHz/秒
    亞秒級:沒有達到秒的速度,即1GHz/1.2秒

8. time() -> floating point number 

  返回當前時間的時間戳。

  如果系統的時鍾支持,可能會出現分數的形式。

9. strftime(format[, tuple]) -> string 

  把一個代表時間的元組轉換為指定格式的字符串,如果沒有傳入 tuple ,將調用 localtime() 。如果元組中任何一個元素越界(不在范圍內),將拋出 ValueError 錯誤。

關於format的表格:

格式 含義 備注
%a 本地(locale)簡化星期名稱  
%A 本地完整星期名稱  
%b 本地簡化月份名稱  
%B 本地完整月份名稱  
%c 本地相應的日期和時間表示  
%d 一個月中的第幾天(01 - 31)  
%H 一天中的第幾個小時(24小時制,00 - 23)  
%I 第幾個小時(12小時制,01 - 12)  
%j 一年中的第幾天(001 - 366)  
%m 月份(01 - 12)  
%M 分鍾數(00 - 59)  
%p 本地am或者pm的相應符 1
%S 秒(01 - 61) 2
%U 一年中的星期數。(00 - 53星期天是一個星期的開始。)第一個星期天之前的所有天數都放在第0周。 3
%w 一個星期中的第幾天(0 - 6,0是星期天) 3
%W 和%U基本相同,不同的是%W以星期一為一個星期的開始。  
%x 本地相應日期  
%X 本地相應時間  
%y 去掉世紀的年份(00 - 99)  
%Y 完整的年份  
%Z 時區的名字(如果不存在為空字符)  
%% ‘%’字符  

備注:

  1.“%p”只有與“%I”配合使用才有效果。

  2.文檔中強調確實是0 - 61,而不是59,閏年秒占兩秒。

  3.當使用strptime()函數時,只有當在這年中的周數和天數被確定的時候%U和%W才會被計算。

參考資料:戳這里

例子:

 

10. strptime(string, format) -> struct_time 

  將字符串格式的時間轉換成元祖格式的。是上面方法的逆向。

總結:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM