【Python】Python的time和datetime模組

來源:互聯網
上載者:User

標籤: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模組

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.