time模塊提供各種時間相關的功能,與時間相關的模塊有:time,datetime,calendar
必要說明:
這個模塊的功能不是適用於所有的平臺
這個模塊中定義的大部分函數是調用C平臺上的同名函數實現
一些術語和約定的解釋:
- 時間戳(timestamp)的方式,返回的是float類型:通常來說,時間戳表示的是從1970年1月1日開始按秒計算的偏移量(time.gmtime(0)此模塊中的函數無法處理1970紀元年以前的時間或太遙遠的未來(處理極限取決於C函數庫,對於32位系統而言,是2038年)
- UTC(Coordinated Universal Time,世界協調時)也叫格林威治天文時間,是世界標準時間.在我國爲UTC+8
- DST(Daylight Saving Time)即夏令時
- 一些實時函數的計算精度可能不同
表示時間的三種方式
在Python中,通常有這三種方式來表示時間:時間戳、元組(struct_time)、格式化的時間字符串:
時間戳(timestamp):通常來說,時間戳表示的是從1970年1月1日00:00:00開始按秒計算的偏移量。我們運行“type(time.time())”,返回的是float類型。
格式化的時間字符串(Format String): ‘1999-12-06’
%y 兩位數的年份表示(00-99) %Y 四位數的年份表示(000-9999) %m 月份(01-12) %d 月內中的一天(0-31) %H 24小時制小時數(0-23) %I 12小時制小時數(01-12) %M 分鐘數(00=59) %S 秒(00-59) %a 本地簡化星期名稱 %A 本地完整星期名稱 %b 本地簡化的月份名稱 %B 本地完整的月份名稱 %c 本地相應的日期表示和時間表示 %j 年內的一天(001-366) %p 本地A.M.或P.M.的等價符 %U 一年中的星期數(00-53)星期天爲星期的開始 %w 星期(0-6),星期天爲星期的開始 %W 一年中的星期數(00-53)星期一爲星期的開始 %x 本地相應的日期表示 %X 本地相應的時間表示 %Z 當前時區的名稱 %% %號本身
元組(struct_time):struct_time元組共有9個元素(年,月,日,時,分,秒,一年中第幾周,一年中第幾天,是否是夏令時),gmtime(),localtime()和strptime()以時間元祖(struct_time)的形式返回
索引(Index) | 屬性(Attribute) | 值(Values) |
---|---|---|
0 | tm_year(年) | 比如2011 |
1 | tm_mon(月) | 1 - 12 |
2 | tm_mday(日) | 1 - 31 |
3 | tm_hour(時) | 0 - 23 |
4 | tm_min(分) | 0 - 59 |
5 | tm_sec(秒) | 0 - 60 |
6 | tm_wday(weekday) | 0 - 6(0表示週一) |
7 | tm_yday(一年中的第幾天) | 1 - 366 |
8 | tm_isdst(是否是夏令時) | 默認爲0 |
import time
# time() 返回當前時間的一個時間戳,(1970元年後的浮點秒數)
print(time.time()) # 1525509143.3561425 (這是一個時間戳)
# localtime() 將一個時間戳(1970紀元年後經過的浮點秒數)轉化爲當前地區的一個struct_time(),未設置默認爲當前時間
print(time.localtime(1525509143.3561425))
# time.struct_time(tm_year=2018, tm_mon=5, tm_mday=5, tm_hour=16, tm_min=32, tm_sec=23, tm_wday=5, tm_yday=125, tm_isdst=0)
# ctime([secs]) 把一個時間戳(按秒計算的浮點數)轉化爲格式化時間字符串。默認參數是time.time()
print(time.ctime()) # Sat May 5 16:54:30 2018
# gmtime() 與localtime類似,時間戳轉化爲struct_time不過返回的UTC世界標準時間。
print(time.gmtime(1525509143.3561425))
# time.struct_time(tm_year=2018, tm_mon=5, tm_mday=5, tm_hour=8, tm_min=32, tm_sec=23, tm_wday=5, tm_yday=125, tm_isdst=0)
# mktime() 將一個strut_time 轉化爲時間戳(1970紀元年後經過的浮點秒數)
print(time.mktime(time.localtime())) # 1525509143.3561425
# asctime([t]) 把一個struct_time轉化爲格式化時間字符串。默認參數time.localtime()
print(time.asctime()) # Sat May 5 16:52:07 2018
# strftime(format[,t]) 把一個struct_time轉化爲格式化的時間字符串,默認參數time.localtime(),如果元組中任命一個元素越界,將會拋出ValueError異常
print(time.strftime("%b %d %Y %H:%M:%S", time.localtime())) # Jan 14 2019 10:29:54
print(time.strftime("%Y %m %d %X",time.localtime())) # 2018 05 05 17:04:49
# strptime(string[,format]) 把一個格式化時間字符串轉化爲struct_time,實際上它和strftie()是逆操作
print(time.strptime('14 2019 10:29:54','%d %Y %H:%M:%S'))
# time.struct_time(tm_year=2019, tm_mon=1, tm_mday=14, tm_hour=10, tm_min=29, tm_sec=54, tm_wday=0, tm_yday=14, tm_isdst=-1)
# clock() 第一次返回的是程序運行時間,第二個是和第一個clock直接的時間差。在UNIX系統上,它返回的是“進程時間”,它是用秒錶示的浮點數(時間戳)。而在WINDOWS中,第一次調用,返回的是進程運行的實際時間。而第二次之後的調用是自第一次調用以後到現在的運行時間。(實際上是以WIN32上QueryPerformanceCounter()爲基礎,它比毫秒錶示更爲精確)
# python3.3以後不被推薦使用,該方法依賴操作系統,建議使用per_counter(返回系統運行時間)或process_time(返回進程運行時間)代替
print(time.clock()) #4.72616147781398e-07 這個數基本等於0
time.sleep(2)
print(time.clock()) #1.9999187100225817 等於2
# altzone() 返回格林威治西部的夏令時地區的偏移秒數,如果該地區在格林威治東部會返回負值(如西歐,包括英國),對夏令時啓用地區才能使用
time.daylight 如果夏令時被定義,則該值爲非零
time.perf_counter() 返回計時器的精準時間(系統的運行時間),包含整個系統的睡眠時間.由於返回值的基準點是未定義的,所以,只有連續調用的結果之間的差纔是有效的
time.process_time() 返回當前進程執行CPU的時間總和,不包含睡眠時間.由於返回值的基準點是未定義的,所以只有連續調用的結果之間的差纔是有效的
time.sleep(secs) 推遲調用線程的運行,secs的單位是秒
time.timezone() 是當地時區(未啓動夏令時)距離格林威治的偏移秒數(美洲>0,歐洲大部分,亞洲,非洲<=0)
time.tzname 包含兩個字符串的元組,第一是當地夏令時區的名稱,第二是當地的DST時區的名稱
小結:時間戳是計算機能夠識別的時間;時間字符串是人能夠看懂的時間;元組則是用來操作時間的
幾種格式之間的轉換,放網絡收集圖