time 模組 -- 時間獲取和轉換
time 模組提供各種時間相關的功能
在 Python 中,與時間處理有關的模組包括:time,datetime 以及 calendar
必要說明:
- 雖然這個模組總是可用,但並非所有的功能都適用於各個平臺。
- 該模組中定義的大部分函數是調用 C 平臺上的同名函數實現,所以各個平臺上實現可能略有不同。
一些術語和約定的解釋:
- 時間戳記(timestamp)的方式:通常來說,時間戳記表示的是從 1970 年 1 月 1 日 00:00:00 開始按秒計算的偏移量(time.gmtime(0))此模組中的函數無法處理 1970 紀元年以前的日期和時間或太遙遠的未來(處理極限取決於 C 函式程式庫,對於 32 位元系統來說,是 2038 年)
- UTC(Coordinated Universal Time,世界協調時)也叫格林威治天文時間,是世界標準時間。在台灣為 UTC+8
- DST(Daylight 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 ~ 6(0 表示星期一) |
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"(2015年12月11日 週二 18時07分14秒)的 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 紀元年後經過的浮點秒數)並返回當地時間下的時間元組 t(t.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 - 6,0 是星期天) |
注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 才會被計算。
舉個例子:
- # I love FishC.com!
- >>> import time as t
- >>> t.strftime("a, %d %b %Y %H:%M:%S +0000", t.gmtime())
- 'a, 24 Aug 2014 14:15:03 +0000'
複製代碼
time.strptime(string[, format])
把一個格式化時間字串轉化為 struct_time。實際上它和 strftime() 是逆操作。
舉個例子:
- # I really love FishC.com!
- >>> import time as t
- >>> t.strptime("30 Nov 14", "%d %b %y")
- 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()
留言列表