標籤:log 進程 ctime 精確 utc min count cpu universal
Python語言中與時間有關的模組主要是:time,datetime,calendar(Python的time模組主要調用C庫,所以各個平台可能有所不同)
名詞解釋:UTC時間
UTC時間(Coordinated Universal Time,世界協調時)亦即格林威治天文時間,世界標準時間。在中國為UTC+8。DST(Daylight Saving Time)即夏令時
Python中時間有3種表現方式,分別是:
1.時間戳記
時間戳記表示的是從1970年1月1日 00:00:00開始到現在時間的位移量,以秒計算的值(float類型)。返回時間戳記方式的方法主要有time(),clock()等。
time()方法返回的值:從紀元開始(1970年1月1日 00:00:00)以秒為單位的當前UTC時間(float類型)
>>> time.time() #返回當前UTC時間的時間戳記
1510885126.5995045
clock()方法返回的值:
首先關於這個方法的注釋是這樣寫的:
Return the CPU time or real time since the start of the process or since
the first call to clock(). This has as much precision as the system
records.
clock翻譯過來的意思就是 計時器
precision翻譯過來的意思就是 精確
這兩個單詞很好的表達了這個方法所實現的功能。
clock()方法,在不同的系統上含義不同。 在UNIX系統上,它返回的是“進程時間”,它是用秒錶示的浮點數(時間戳記)。
而在WINDOWS中,第一次調用,返回的是進程啟動並執行實際時間。而第二次 之後的調用是自第一次調用以後到現在的已耗用時間。(實際上是以WIN32上QueryPerformanceCounter()為基礎,它比毫秒錶示更為 精確)
>>> time.clock()
3.5378305527754105e-06
>>> time.clock()
5.703646194302607
>>> time.clock()
17.30329184519444
第一個clock()輸出的是程式已耗用時間
第二、三個clock()輸出的都是與第一個clock的時間間隔
2.struct_time(元組格式的時間對象)
struct_time元組共有9個元素,返回struct_time時間對象的方法主要有 gmtime()、localtime()、strptime()。
表示struct_time元組包含的9個元素分別表示什麼含義:
tm_wday(weekday)的值是:0~6(0表示周日)
gmtime([secs])方法將一個時間戳記轉換為 UTC時間的struct_time時間對象格式。沒有參數時,預設目前時間
>>> time.gmtime()
time.struct_time(tm_year=2017, tm_mon=11, tm_mday=17, tm_hour=2, tm_min=29, tm_sec=35, tm_wday=4, tm_yday=321, tm_isdst=0)
localtime([secs])方法將一個時間戳記轉換為 當前時區的struct_time時間對象格式。沒有參數時,以目前時間為準
>>> time.localtime()
time.struct_time(tm_year=2017, tm_mon=11, tm_mday=17, tm_hour=10, tm_min=29, tm_sec=42, tm_wday=4, tm_yday=321, tm_isdst=0)
strptime()方法將一個時間字串轉換為struct_time時間對象格式。和strftime()是逆操作
>>> time.strptime("2017/11/17","%Y/%m/%d")
time.struct_time(tm_year=2017, tm_mon=11, tm_mday=17, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=321, tm_isdst=-1)
3.格式化的字串
strftime(format[,t])方法將一個struct_time時間對象格式的時間 轉換為格式化的時間字串。如果t未指定,將傳入time.localtime()。
>>> time.strftime("%Y-%m-%d %H:%M:%S") #未指定t參數
‘2017-11-17 11:30:13‘
>>> time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime()) #指定 t參數為UTC時間
‘2017-11-17 03:33:15‘
如果struct_time元組中的任何一個元素越界,將會拋出ValueError的錯誤。
格式對照表:
其它方法:
time.sleep([secs]):線程延遲指定的時間運行。單位為秒
time.asctime([t]) 將一個表示時間的struct_time表示為"‘Fri Nov 17 11:42:02 2017‘"這種 形式。如果沒有參數,會把time.localtime()作為參數傳入
>>> time.asctime()
‘Fri Nov 17 11:42:02 2017‘
>>> time.asctime(time.localtime())
‘Fri Nov 17 11:42:31 2017‘
time.ctime([secs])把一個時間戳記轉換為time.asctime()的形式。如果沒有參數,會把time.time()作為參數傳入。它的作用相當於
time.asctime(time.localtime())
>>> time.ctime()
‘Fri Nov 17 11:40:07 2017‘
>>> time.ctime(time.time())
‘Fri Nov 17 11:40:54 2017‘
暈,為什麼使用 time.ctime(time.time())方法會得到當前時區的時間。明明time.time()方法返回的時間戳記表示 UTC時間的。
>>> time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime(time.time()))
‘2017-11-17 03:46:59‘
>>> time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime(time.time()+28800))
‘2017-11-17 11:54:19‘
28800表示8個小時(中國時間為 UTC時間+8小時)
暫且先把這個問題記在這裡。
關於時間模組,這些只是最基礎的應用。如何合理使用這些方法才是最應該學習的。
python 模組學習——time模組