標籤:ctime 保留 斜杠 unix 開始 地方 att 表示 keyword
time
常用的有time.time()和time.sleep()函數。
import timeprint(time.time())
1499305554.3239055
上面的浮點數稱為UNIX紀元時間戳記,是從1970年1月1日0點起到今天經過的秒數。可以看到後面有6位小數,使用round函數,可以實現浮點數的四捨五入。如下
# 預設四捨五入到整數位,即不保留小數print(round(time.time()))# 可指定參數保留的小數位元print(round(time.time(), 2))
14993055541499305554.49
time.sleep(sec)可以讓當前休眠,參數填入秒(s)。
print(‘good‘)time.sleep(5.5)# 5.5秒後才列印這句print(‘yes‘)
goodyes
其他一些函數的使用
# 返回UTC時間print(time.gmtime())# 返回本地時間,在中國就是UTC+8print(time.localtime())
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=6, tm_hour=1, tm_min=46, tm_sec=0, tm_wday=3, tm_yday=187, tm_isdst=0)time.struct_time(tm_year=2017, tm_mon=7, tm_mday=6, tm_hour=9, tm_min=46, tm_sec=0, tm_wday=3, tm_yday=187, tm_isdst=0)
可以發現這是一個元群組類型,中國所在時區位UTC+8,可以發現除了tm_hour不一樣(它們相差了剛好+8),其餘都一樣。
下面的函數可以返回一個格式化的日期時間,看起來更加直觀。
print(time.ctime())print(time.asctime())# 由於使用預設參數和上面的結果一樣print(time.ctime(time.time()))print(time.asctime(time.localtime()))
Thu Jul 6 09:46:15 2017Thu Jul 6 09:46:15 2017Thu Jul 6 09:46:15 2017Thu Jul 6 09:46:15 2017
ctime()可以傳入一個時間戳記,沒有指定參數時,預設使用目前時間戳作為參數。即time.time()
gtime()可以傳入一個struct_time,沒有指定參數時,預設使用目前時間。即time.localtime()
struct_time轉化為字串及字串轉為struct_time
- strptime的第一個參數是字串形式的日期,第二個參數是自訂的日期轉換格式。這兩個參數的格式一定要對應。比如
time.strptime(‘2017/7/6‘, ‘%Y-%m-%d‘)一個用了斜杠,一個用了虛線,就會報錯。此函數返回一個struct_time
- strftime的第一個參數是想要轉化成的日期格式,第二個參數是一個struct_time,此函數將元組形式的struct_time轉化成第一個參數指定的格式樣子,返回的是轉化後的日期文字形式。
%Y-%m-%d表示年月日,在datetime模組會詳細介紹。
a = time.strptime(‘2017/7/6‘, ‘%Y/%m/%d‘)b = time.strftime(‘%Y-%m-%d‘, time.localtime())print(a)print(b)
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=6, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=187, tm_isdst=-1)2017-07-06
測配量序的已耗用時間
使用時間戳可以方便地計時一段程式地已耗用時間
start_time = time.time()sum = 0for i in range(10000000): sum += 1end_time = time.time()print(end_time - start_time)
2.185124397277832
可以看到執行迴圈計算加法一千萬次,那段程式花了2秒多。
也可以使用time.clock()函數
start = time.clock()print(start) # 2.6773594453225194e-06time.sleep(2)end = time.clock()print(end - start) # 差值代表了睡眠2秒的時間。2.000246763295544time.sleep(3)print(time.clock()) # 5.00058991153112,返回的是從第一次調用到這次調用的時間間隔
4.4622657422041984e-072.00260060847455675.013243112269714
可以看到clock第一次調用時比較奇怪,它返回的是進程啟動並執行時間。之後再次調用都是與第一次調用clock的值的差了。即從第一次調用開始算起,到當前調用clock所經曆的時間。
像上面一樣,在想測試的一部分代碼的上方設定start,結束的地方設定end,相減也能得到片段代碼已耗用時間,而且比time.time()還要準確。
datetime
datetime模組用來管理日期和時間,其中有三個子模組。分別是time、date、datetime,所以想要使用datetime可以使用下面的匯入方式。
from datetime import datetime# 返回目前時間now = datetime.now()print(now.year, now.month, now.microsecond)# 可以自訂參數,返回格式化後的時間dt = datetime(2017, 10, 1, 23, 59, 59, 456123)print(dt)
2017 7 7196092017-10-01 23:59:59.456123
datetime接受7個參數,分別對應年、月、日、時、分、秒、微秒。分別儲存在datetime的year、month、day、hour、minute、second、microsecond屬性中。
由時間戳記可以轉換成datetime類型。如下,使用目前時間的時間戳記。實際上等效於datetime.now()。當然反過來由datetime得到時間戳記也是可以的。
# 時間戳記轉datetimenow = datetime.fromtimestamp(time.time())print(now)sometime = datetime(2017, 7, 5, 23, 59, 59)# datetime轉時間戳記print(sometime.timestamp())
2017-07-06 09:46:07.9037691499270399.0
這些datetime對象可以使用><=符號來比較兩個日期的先後。也可進行減運算,表示兩個時刻的差值。比如
dt1 = datetime(2017, 5, 31)dt2 = datetime(2017, 4, 1)print(dt1 - dt2)print(dt1 > dt2)
60 days, 0:00:00True
timedelta表示一段時間
注意它不是表示一個時刻,而是一段時間。
import datetimedelta = datetime.timedelta(weeks=2, days=7, hours=1, seconds=59,microseconds=234353)delta1 = datetime.timedelta(days=5, hours=2)print(delta.seconds) # 返回屬性hours和seconds的和print(delta.total_seconds()) # 只是以秒來表示這段時間print(delta > delta1)print(delta + delta1)
36591818059.234353True26 days, 3:00:59.234353
timedelta的接受的參數有weeks、days、hours、minutes、seconds、microseconds,但是其屬性卻只有days、seconds、microseconds。並且除了像datetime一樣支援大小比較、減法運算外,還可以進行加法運算,表示兩個時間段的差值。
將datetime轉化為字串形式及字串轉為datetime對象
time模組也有這兩個函數(見上面的例子),使用上比較累類似。
- strptime按照指定格式將字串形式的日期轉換成datetime對象並返回。
- strftime將一個datetime對象(比如now)根據指定的格式轉換成字串並返回。
from datetime import datetimea = datetime.strptime(‘2017/7/6‘, ‘%Y/%m/%d‘)b = datetime.now().strftime(‘%Y-%m-%d‘)print(a)print(b)
2017-07-06 00:00:002017-07-06
關於日期時間的格式,看下錶。
| 格式指令 |
含義 |
| %Y |
帶世紀的四位年份,如2017 |
| %y |
後兩位年份,如17表示2017 |
| %m |
月份,從01到12 |
| %B |
完整的月份,如November |
| %b |
月份的簡寫,如Nov |
| %d |
一個月中的第幾天,如從01到31(如果有的話) |
| %j |
一年中的第幾天 |
| %w |
一周中的第幾天 |
| %A |
完整的周幾,如Monday |
| %a |
簡寫的周幾,如Mon |
| %H |
24小時制的小時00-23 |
| %h |
12小時制的小時01-12 |
| %M |
分,00-59 |
| %S |
秒,00-59 |
| %p |
AM或者PM |
【Python】Python的time和datetime模組