Python的time和datetime模塊

Python的time和datetime模塊

time

常用的有time.time()time.sleep()函數卷扮。

import time

print(time.time())
1499305554.3239055

上面的浮點數稱為UNIX紀元時間戳寇钉,是從1970年1月1日0點起到今天經過的秒數巾兆。可以看到后面有6位小數管怠,使用round函數袭祟,可以實現浮點數的四舍五入。如下

# 默認四舍五入到整數位捂贿,即不保留小數
print(round(time.time()))
# 可指定參數保留的小數位數
print(round(time.time(), 2))
1499305554
1499305554.49

time.sleep(sec)可以讓當前休眠纠修,參數填入秒(s)。

print('good')
time.sleep(5.5)
# 5.5秒后才打印這句
print('yes')
good
yes

其他一些函數的使用

# 返回UTC時間
print(time.gmtime())
# 返回本地時間厂僧,在中國就是UTC+8
print(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)

可以發(fā)現這是一個元組類型扣草,中國所在時區(qū)位UTC+8,可以發(fā)現除了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 2017
Thu Jul  6 09:46:15 2017
Thu Jul  6 09:46:15 2017
Thu 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 = 0
for i in range(10000000):
    sum += 1

end_time = time.time()
print(end_time - start_time)
2.185124397277832

可以看到執(zhí)行循環(huán)計算加法一千萬次韵吨,那段程序花了2秒多匿垄。

也可以使用time.clock()函數

start = time.clock()
print(start)  # 2.6773594453225194e-06
time.sleep(2)
end = time.clock()
print(end - start)  # 差值代表了睡眠2秒的時間。2.000246763295544
time.sleep(3)
print(time.clock())  # 5.00058991153112,返回的是從第一次調用到這次調用的時間間隔
4.4622657422041984e-07
2.0026006084745567
5.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 719609
2017-10-01 23:59:59.456123

datetime接受7個參數,分別對應年莹妒、月名船、日、時旨怠、分渠驼、秒、微秒鉴腻。分別保存在datetime的year渴邦、month、day拘哨、hour、minute信峻、second倦青、microsecond屬性中。

由時間戳可以轉換成datetime類型盹舞。如下产镐,使用當前時間的時間戳。實際上等效于datetime.now()踢步。當然反過來由datetime得到時間戳也是可以的癣亚。

# 時間戳轉datetime
now = datetime.fromtimestamp(time.time())
print(now)
sometime = datetime(2017, 7, 5, 23, 59, 59)
# datetime轉時間戳
print(sometime.timestamp())
2017-07-06 09:46:07.903769
1499270399.0

這些datetime對象可以使用><=符號來比較兩個日期的先后。也可進行減運算获印,表示兩個時刻的差值述雾。比如

dt1 = datetime(2017, 5, 31)
dt2 = datetime(2017, 4, 1)
print(dt1 - dt2)
print(dt1 > dt2)
60 days, 0:00:00
True

timedelta表示一段時間

注意它不是表示一個時刻,而是一段時間兼丰。

import datetime

delta = 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)
3659
1818059.234353
True
26 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 datetime

a = datetime.strptime('2017/7/6', '%Y/%m/%d')
b = datetime.now().strftime('%Y-%m-%d')
print(a)
print(b)
2017-07-06 00:00:00
2017-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

by @ sunhaiyu

2017.7.6

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市氏义,隨后出現的幾起案子锄列,更是在濱河造成了極大的恐慌,老刑警劉巖惯悠,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件邻邮,死亡現場離奇詭異,居然都是意外死亡克婶,警方通過查閱死者的電腦和手機筒严,發(fā)現死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來情萤,“玉大人萝风,你說我怎么就攤上這事∽涎遥” “怎么了规惰?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長泉蝌。 經常有香客問我歇万,道長揩晴,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任贪磺,我火速辦了婚禮硫兰,結果婚禮上,老公的妹妹穿的比我還像新娘寒锚。我一直安慰自己劫映,他們只是感情好,可當我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布刹前。 她就那樣靜靜地躺著泳赋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪喇喉。 梳的紋絲不亂的頭發(fā)上祖今,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天,我揣著相機與錄音拣技,去河邊找鬼千诬。 笑死,一個胖子當著我的面吹牛膏斤,可吹牛的內容都是我干的徐绑。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼莫辨,長吁一口氣:“原來是場噩夢啊……” “哼泵三!你這毒婦竟也來了?” 一聲冷哼從身側響起衔掸,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎俺抽,沒想到半個月后敞映,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡磷斧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年振愿,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片弛饭。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡冕末,死狀恐怖,靈堂內的尸體忽然破棺而出侣颂,到底是詐尸還是另有隱情档桃,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布憔晒,位于F島的核電站藻肄,受9級特大地震影響蔑舞,放射性物質發(fā)生泄漏。R本人自食惡果不足惜嘹屯,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一攻询、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧州弟,春花似錦钧栖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至浙滤,卻和暖如春阴挣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背纺腊。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工畔咧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人揖膜。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓誓沸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親壹粟。 傳聞我的和親對象是個殘疾皇子拜隧,可洞房花燭夜當晚...
    茶點故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內容