time常用函數
最近參與python的一個項目,發現經常遇到一些常用的模塊,而每次使用時,我都要查一遍。終於,我決定要各個擊破,對常用的python小知識進行總結。下面總結了python中對時間處理的常見函數。
在開始之前,首先要說明這幾點:
- 在Python中,通常有這幾種方式來表示時間:1)、時間戳 2)、格式化的時間字符串 3)、元組(struct_time)共九個元素。由於Python的time模塊實現主要調用C庫,所以各個平台可能有所不同。
- UTC(Coordinated Universal Time,世界協調時)亦即格林威治天文時間,世界標准時間。在中國為UTC+8。DST(Daylight Saving Time)即夏令時。
- 時間戳(timestamp)的方式:通常來說,時間戳表示的是從1970年1月1日08:00:00開始按秒計算的偏移量。運行“type(time.time())”,返回的是float類型。返回時間戳方式的函數主要有time(),clock()等。
- 元組(struct_time)方式:struct_time元組共有9個元素,返回struct_time的函數主要有gmtime(),localtime(),strptime()。
time的函數較多,但常用的也就那幾個。使用time函數前,照例先導入time模塊。介紹常用函數前要先了解最基礎的函數:
(1)、time函數——返回當前時間的時間戳,浮點數格式
>>> from time import * #導入python模塊的所有函數 >>> time() 1370485361.442
(2)、localtime函數——localtime([secs]),將一個時間戳轉換為當前時區的struct_time。secs參數未提供,則以當前時間為准。
#默認以當前時間為准 >>> localtime() time.struct_time(tm_year=2013, tm_mon=6, tm_mday=6, tm_hour=10, tm_min=39, tm_sec=49, tm_wday=3, tm_yday=157, tm_isdst=0) #等同於localtime() >>> localtime(time()) time.struct_time(tm_year=2013, tm_mon=6, tm_mday=6, tm_hour=10, tm_min=40, tm_sec=37, tm_wday=3, tm_yday=157, tm_isdst=0) #指定一個時間戳參數 >>> localtime(1370485361.442) time.struct_time(tm_year=2013, tm_mon=6, tm_mday=6, tm_hour=10, tm_min=22, tm_sec=41, tm_wday=3, tm_yday=157, tm_isdst=0) #默認從1970年1月1日開始 >>> localtime(345) time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=5, tm_sec=45, tm_wday=3, tm_yday=1, tm_isdst=0) >>> localtime(1) time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=0, tm_sec=1, tm_wday=3, tm_yday=1, tm_isdst=0)
localtime()輸出參數說明:
索引(Index) | 屬性(Attribute) | 值(Values) |
---|---|---|
0 | tm_year(年) | 比如2013 |
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 |
6 | tm_wday(weekday) | 0 - 6(0表示周日) |
7 | tm_yday(一年中的第幾天) | 1 - 366 |
8 | tm_isdst(是否是夏令時) | 默認為-1 |
(3)、gmtime()函數——和localtime()方法類似,gmtime()方法是將一個時間戳轉換為UTC時區(0時區)的struct_time。
>>> gmtime() time.struct_time(tm_year=2013, tm_mon=6, tm_mday=6, tm_hour=4, tm_min=2, tm_sec=47, tm_wday=3, tm_yday=157, tm_isdst=0) >>> gmtime(time()) time.struct_time(tm_year=2013, tm_mon=6, tm_mday=6, tm_hour=4, tm_min=2, tm_sec=53, tm_wday=3, tm_yday=157, tm_isdst=0)
(4)、asctime()函數——asctime([tuple]), 把一個表示時間的元組或者struct_time表示為這種形式:'Sun Jun 20 23:21:05 1993'。如果沒有參數,將會將time.localtime()作為參數傳入。
>>> asctime()#默認是當前時間的struct time 'Thu Jun 06 10:55:40 2013' >>> asctime(localtime()) 'Thu Jun 06 10:56:02 2013'
(5)、ctime函數——ctime([secs]),把一個時間戳(按秒計算的浮點數)轉化為time.asctime()的形式。如果參數未給或者為None的時候,將會默認time.time()為參數。它的作用相當於time.asctime(time.localtime(secs))。
>>> ctime() #等同於ctime(time()) 'Thu Jun 06 11:05:34 2013' >>> ctime(time()) 'Thu Jun 06 11:05:44 2013' #默認從1970年1月1日08:00:00開始 >>> ctime(238) 'Thu Jan 01 08:03:58 1970' >>> ctime(1) 'Thu Jan 01 08:00:01 1970'
以上是基礎的時間函數,下面是常用的時間處理函數。
實際存儲中,更多的是存儲時間戳(這樣易於時間的計算,有更好的存儲性能)而不是更易於我們閱讀的時間格式,所以,我們有將時間戳轉換為普通時間格式的沖動——strftime函數。
(6)、strftime函數——strftime(format[, tuple]): 把一個代表時間的元組或者struct_time(如由time.localtime()和time.gmtime()返回)轉化為格式化的時間字符串。 如果tuple未指定,將傳入time.localtime()。如果元組中任何一個元素越界,ValueError的錯誤將會被拋出。
>>> strftime('%Y-%m-%d %H:%M:%S', localtime(time())) '2013-06-06 11:10:57' #這是我們比較喜愛的時間格式 >>> strftime('%Y-%m-%d', localtime()) '2013-06-06' >>> strftime('%Y-%m-%d %X', localtime()) ==> %X給出默認本地相應時間 '2013-06-06 11:12:39'
Format參數說明:
格式 | 含義 |
---|---|
%a | 本地(locale)簡化星期名稱 |
%A | 本地完整星期名稱 |
%b | 本地簡化月份名稱 |
%B | 本地完整月份名稱 |
%c | 本地相應的日期和時間表示 |
%d | 一個月中的第幾天(01 - 31) |
%H | 一天中的第幾個小時(24小時制,00 - 23) |
%I | 第幾個小時(12小時制,01 - 12) |
%j | 一年中的第幾天(001 - 366) |
%m | 月份(01 - 12) |
%M | 分鍾數(00 - 59) |
%p | 本地am或者pm的相應符 |
%S | 秒(01 - 61) |
%U | 一年中的星期數。(00 - 53星期天是一個星期的開始。)第一個星期天之前的所有天數都放在第0周。 |
%w | 一個星期中的第幾天(0 - 6,0是星期天) |
%W | 和%U基本相同,不同的是%W以星期一為一個星期的開始。 |
%x | 本地相應日期 |
%X | 本地相應時間 |
%y | 去掉世紀的年份(00 - 99) |
%Y | 完整的年份 |
%Z | 時區的名字(如果不存在為空字符) |
%% | ‘%’字符 |
(7)、mktime()函數——mktime(tuple),將一個struct_time或者9個參數的時間元組轉化為時間戳。
>>> mktime(localtime()) 1370490962.0 >>> mktime(2013, 6, 6, 13, 3, 38, 1, 48, 0) #這樣寫是錯的 Traceback (most recent call last): File "<pyshell#28>", line 1, in <module> mktime(2013, 6, 6, 13, 3, 38, 1, 48, 0) TypeError: mktime() takes exactly one argument (9 given) >>> mktime((2013, 6, 6, 13, 3, 38, 1, 48, 0))#注意這里9個參數的元組作為一個參數 1370495018.0 >>>
(8)、strptime()函數——strptime(string[, format]):把一個格式化時間字符串轉化為struct_time。它是strftime()的逆操作。
>>> strptime('2013-06-06 11:12:39','%Y-%m-%d %X') time.struct_time(tm_year=2013, tm_mon=6, tm_mday=6, tm_hour=11, tm_min=12, tm_sec=39, tm_wday=3, tm_yday=157, tm_isdst=-1)
其他常用的時間函數:
(9)、sleep()函數——sllep(secs),可以通過調用time.sleep來掛起當前的進程。time.sleep接收一個浮點型參數,表示進程掛起的時間。
(10)、clock()函數——這個函數在不同的系統上含義不同。 在Linux系統上,它返回的是“進程時間”,它是用秒表示的浮點數(時間戳)。在windows操作系統上,time.clock() 返回第一次調用該方法到現在的秒數,其精確度高於1微秒。可以使用該函數來記錄程序執行的時間。
總結一下該函數有兩個功能:
在第一次調用的時候,返回的是程序運行的實際時間;
以第二次之后的調用,返回的是自第一次調用后,到這次調用的時間間隔
>>> clock() 1.655286571487689e-06 #第一次調用是程序運行時間 >>> clock() 8.366160976619078 #第二次調用是與第一次的時間間隔 >>> clock() #第三次調用是與第一次的時間間隔 12.056175791433892 >>> sleep(1)
總結一下:
(1)、常見應用
1)、獲取當前時間:
time.time() 獲取當前時間戳
time.localtime() 當前時間的struct_time形式
time.ctime() 當前時間的字符串形式
2)、將時間戳轉換為字符串:
time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
3)、將字符串轉換為時間戳:
time.mktime(time.strptime('2013-06-06 09:00','%Y-%m-%d %H:%M'))
(2)、在Python中共有三種表達方式以及這三種方式之間的轉換:
1)、timestamp
2)、tuple或者struct_time
3)、格式化字符串。
當然time模塊還有其它函數,目前還沒用到,用到再進行補充。