close

 time 模組 -- 時間獲取和轉換

time 模組提供各種時間相關的功能

Python 中,與時間處理有關的模組包括:timedatetime 以及 calendar


必要說明:

 

  • 雖然這個模組總是可用,但並非所有的功能都適用於各個平臺。
  • 該模組中定義的大部分函數是調用 C 平臺上的同名函數實現,所以各個平臺上實現可能略有不同。



一些術語和約定的解釋:

 

  • 時間戳記(timestamp)的方式:通常來說,時間戳記表示的是從 1970 1 1 00:00:00 開始按秒計算的偏移量(time.gmtime(0))此模組中的函數無法處理 1970 紀元年以前的日期和時間或太遙遠的未來(處理極限取決於 C 函式程式庫,對於 32 位元系統來說,是 2038 年)
  • UTCCoordinated Universal Time,世界協調時)也叫格林威治天文時間,是世界標準時間。在台灣為 UTC+8
  • DSTDaylight Saving Time)即夏令時的意思
  • 一些即時函數的計算精度可能低於它們建議的值或參數,例如在大部分 Unix 系統,時鐘一秒鐘滴答”50~100



時間元祖(time.struct_time):

gmtime()localtime() strptime() 以時間元祖(struct_time)的形式返回。
 

索引值(Index

屬性(Attribute

值(Values

0

tm_year(年)

(例如:2015

1

tm_mon(月)

1 ~ 12

2

tm_mday(日)

1 ~ 31

3

tm_hour(時)

0 ~ 23

4

tm_min(分)

0 ~ 59

5

tm_sec(秒)

0 ~ 61(見下方注1

6

tm_wday(星期幾)

0 ~ 60 表示星期一)

7

tm_yday(一年中的第幾天)

1 ~ 366

8

tm_isdst(是否為夏令時)

0 1 -1-1 代表夏令時)


1:範圍真的是 0 ~ 61(你沒有看錯哦^_^);60 代表閏秒,61 是基於歷史原因保留。


time.altzone

返回格林威治西部的夏令時地區的偏移秒數;如果該地區在格林威治東部會返回負值(如西歐,包括英國);對夏令時啟用地區才能使用。


time.asctime([t])

接受時間元組並返回一個可讀的形式為"Tue Dec 11 18:07:14 2015"20151211 週二 180714秒)的 24 個字元的字串。


time.clock()

用以浮點數計算的秒數返回當前的 CPU 時間。用來衡量不同程式的耗時,比 time.time() 更有用。

Python 3.3 以後不被推薦,由於該方法依賴作業系統,建議使用 perf_counter() process_time() 代替(一個返回系統執行時間,一個返回進程執行時間,請按照實際需求選擇)


time.ctime([secs]) 

作用相當於 asctime(localtime(secs)),未給參數相當於 asctime()


time.gmtime([secs])

接收時間輟(1970 紀元年後經過的浮點秒數)並返回格林威治天文時間下的時間元組 t(注:t.tm_isdst 始終為 0


time.daylight

如果夏令時被定義,則該值為非零。


time.localtime([secs])

接收時間輟(1970 紀元年後經過的浮點秒數)並返回當地時間下的時間元組 tt.tm_isdst 可取 0 1,取決於當地當時是不是夏令時)


time.mktime(t)

接受時間元組並返回時間輟(1970紀元後經過的浮點秒數)


time.perf_counter()

返回計時器的精準時間(系統的執行時間),包含整個系統的睡眠時間。由於返回值的基準點是未定義的,所以,只有連續調用的結果之間的差才是有效的。


time.process_time() 

返回當前進程執行 CPU 的時間總和,不包含睡眠時間。由於返回值的基準點是未定義的,所以,只有連續調用的結果之間的差才是有效的。


time.sleep(secs)

推遲調用執行緒的運行,secs 的單位是秒。


time.strftime(format[, t]) 

把一個代表時間的元組或者 struct_time(如由 time.localtime() time.gmtime() 返回)轉化為格式化的時間字串。如果 t 未指定,將傳入 time.localtime()。如果元組中任何一個元素越界,將會拋出 ValueError 異常。

format 格式如下:
 

格式

含義

備註

%a

本地(locale)簡化星期名稱

 

%A

本地完整星期名稱

 

%b

本地簡化月份名稱

 

%B

本地完整月份名稱

 

%c

本地相應的日期和時間表示

 

%d

一個月中的第幾天(01 - 31

 

%H

一天中的第幾個小時(24 小時制,00 - 23

 

%l

一天中的第幾個小時(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 - 60 是星期天)

3

%W

%U 基本相同,不同的是 %W 以星期一為一個星期的開始

 

%x

本地相應日期

 

%X

本地相應時間

 

%y

去掉世紀的年份(00 - 99

 

%Y

完整的年份

 

%z

+HHMM -HHMM 表示距離格林威治的時區偏移(H 代表十進位的小時數,M 代表十進位的分鐘數)

 

%Z

時區的名字(如果不存在為空字元)

 

%%

%號本身

 


1“%p”只有與“%I”配合使用才有效果。
2:範圍真的是 0 ~ 61(你沒有看錯哦^_^);60 代表閏秒,61 是基於歷史原因保留。
3:當使用 strptime() 函數時,只有當在這年中的周數和天數被確定的時候 %U %W 才會被計算。

舉個例子:

  1. # I love FishC.com!
  2. >>> import time as t
  3. >>> t.strftime("a, %d %b %Y %H:%M:%S +0000", t.gmtime())
  4. 'a, 24 Aug 2014 14:15:03 +0000'
  5.  

複製代碼



time.strptime(string[, format])

把一個格式化時間字串轉化為 struct_time。實際上它和 strftime() 是逆操作。

舉個例子:

  1. # I really love FishC.com!
  2. >>> import time as t
  3. >>> t.strptime("30 Nov 14", "%d %b %y")
  4. time.struct_time(tm_year=2014, tm_mon=11, tm_mday=30, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=6, tm_yday=334, tm_isdst=-1)

複製代碼



time.time()

返回當前時間的時間戳記(1970 紀元年後經過的浮點秒數)


time.timezone

time.timezone 屬性是當地時區(未啟動夏令時)距離格林威治的偏移秒數(美洲 >0;大部分歐洲,亞洲,非洲 <= 0


time.tzname

time.tzname 屬性是包含兩個字串的元組:第一是當地非夏令時區的名稱,第二個是當地的 DST 時區的名稱。

 

 

 

import time as t


class MyTimer():
    def __init__(self):
        self.unit=['年','月','天', '時' , '分', '秒']
        self.prompt ="未開始計時! "
        self.lasted = []
        self.brgin= 0
        self.end = 0

    def __str__(self):
        return self.prompt
    __repr__ = __str__

    def __add__(self, other):
        prompt = "總共運行了"
        result = []
        for index in range(6):
            result.append(self.lasted[index] + other.lasted[index])
            if(result[index]): prompt+=(str(result[index])+self.unit[index])
        return prompt

    #Begin Timer
    def start(self):
        self.begin =t.localtime()
        self.prompt = "提示: 請先調用Stop() Stop Timer"
        print('Begin Start...')

    #Stop Timer
    def stop(self):
        if not self.begin:
            print("提示: Please invoke function 'Stop' ")
        else:
            self.end = t.localtime()
            self._calc()
            print('Timer End')

    #內部方法,計算運行時間
    def _calc(self):
        self.lasted =[]
        self.prompt = "Total Time : "
        for index in range(6):
            self.lasted.append(self.end[index] - self.begin[index])
            if self.lasted[index]:
                self.prompt += (str(self.lasted[index]) + self.unit[index])

        print(self.prompt)

t1 = MyTimer()
t1.start()
t1.stop()

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Eric 的頭像
    Eric

    一個小小工程師的心情抒發天地

    Eric 發表在 痞客邦 留言(0) 人氣()