Python 內置模塊之 時間模塊 time

time模塊提供各種時間相關的功能,與時間相關的模塊有:time,datetime,calendar

必要說明:
這個模塊的功能不是適用於所有的平臺
這個模塊中定義的大部分函數是調用C平臺上的同名函數實現

一些術語和約定的解釋:

  1. 時間戳(timestamp)的方式,返回的是float類型:通常來說,時間戳表示的是從1970年1月1日開始按秒計算的偏移量(time.gmtime(0)此模塊中的函數無法處理1970紀元年以前的時間或太遙遠的未來(處理極限取決於C函數庫,對於32位系統而言,是2038年)
  2. UTC(Coordinated Universal Time,世界協調時)也叫格林威治天文時間,是世界標準時間.在我國爲UTC+8
  3. DST(Daylight Saving Time)即夏令時
  4. 一些實時函數的計算精度可能不同

表示時間的三種方式

在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時區的名稱

小結:時間戳是計算機能夠識別的時間;時間字符串是人能夠看懂的時間;元組則是用來操作時間的

幾種格式之間的轉換,放網絡收集圖

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章