Python 時(shí)間模塊小結(jié)(time and datetime)

一:經(jīng)常使用的時(shí)間方法
1.得到當(dāng)前時(shí)間

使用time模塊,首先得到當(dāng)前的時(shí)間戳

In [42]: time.time()
Out[42]: 1408066927.208922

將時(shí)間戳轉(zhuǎn)換為時(shí)間元組 struct_time
In [43]: time.localtime(time.time())
Out[43]: time.struct_time(tm_year=2014, tm_mon=8, tm_mday=15, tm_hour=9, tm_min=42, tm_sec=20, tm_wday=4, tm_yday=227, tm_isdst=0)

格式化輸出想要的時(shí)間
In [44]: time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
Out[44]: '2014-08-15 09:43:04'

接上文,不加參數(shù)時(shí),默認(rèn)就是輸出當(dāng)前的時(shí)間
In [48]: time.strftime('%Y-%m-%d %H:%M:%S')
Out[48]: '2014-08-15 09:46:53’

當(dāng)然也可以透過(guò)datetime模塊來(lái)實(shí)現(xiàn),如下:
In [68]: t = time.time()
In [69]: datetime.datetime.fromtimestamp(t).strftime('%Y-%m-%d %H:%M:%S')
Out[69]: '2014-08-15 10:04:51’

同時(shí),也可以只使用datetime模塊
In [46]: datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
Out[46]: '2014-08-15 09:45:27’
In [47]: datetime.datetime.today().strftime('%Y-%m-%d %H:%M:%S')
Out[47]: '2014-08-15 09:46:10'

2.獲取時(shí)間差,計(jì)算程序的執(zhí)行時(shí)間等:
使用time模塊:
In [75]: def t():
   ....:     start = time.time()
   ....:     time.sleep(10)
   ....:     end = time.time()
   ....:     print end - start
   ....:

In [76]: t()
10.0014948845

使用datetime模塊:
In [49]: starttime = datetime.datetime.now()
In [50]: endtime = datetime.datetime.now()
In [51]: print (endtime - starttime).seconds
6

3.計(jì)算昨天的日期(發(fā)散思維,計(jì)算其他日期相加、相減等):

In [52]: d1 = datetime.datetime.now()
In [53]: d2 = d1 - datetime.timedelta(days=1)
In [54]: d1
Out[54]: datetime.datetime(2014, 8, 15, 9, 54, 10, 68665)
In [55]: d2
Out[55]: datetime.datetime(2014, 8, 14, 9, 54, 10, 68665)

4.時(shí)間元組 struct_time轉(zhuǎn)化為時(shí)間戳

In [56]: datetime.datetime.now()
Out[56]: datetime.datetime(2014, 8, 15, 9, 57, 52, 779893)

In [57]: datetime.datetime.now().timetuple()
Out[57]: time.struct_time(tm_year=2014, tm_mon=8, tm_mday=15, tm_hour=9, tm_min=58, tm_sec=12, tm_wday=4, tm_yday=227, tm_isdst=-1)

In [58]: time.mktime(datetime.datetime.now().timetuple())
Out[58]: 1408067904.0

5.strptime也挺有用的,將時(shí)間字符串轉(zhuǎn)換為時(shí)間元組struct_time

In [73]: time.strftime('%Y-%m-%d %H:%M:%S')
Out[73]: '2014-08-15 10:27:36'

In [74]: time.strptime('2014-08-15 10:27:36','%Y-%m-%d %H:%M:%S')
Out[74]: time.struct_time(tm_year=2014, tm_mon=8, tm_mday=15, tm_hour=10, tm_min=27, tm_sec=36, tm_wday=4, tm_yday=227, tm_isdst=-1)

二:time和datetime模塊常用方法簡(jiǎn)介

表示時(shí)間的兩種方式:

1. 時(shí)間戳(相對(duì)于1970.1.1 00:00:00以秒計(jì)算的偏移量),時(shí)間戳是惟一的
2. 時(shí)間元組 即(struct_time),共有九個(gè)元素,分別表示,同一個(gè)時(shí)間戳的struct_time會(huì)因?yàn)闀r(shí)區(qū)不同而不同

time 模塊常用方法小記
1.time.clock()

這個(gè)需要注意,在不同的系統(tǒng)上含義不同。在UNIX系統(tǒng)上,它返回的是“進(jìn)程時(shí)間”,它是用秒表示的浮點(diǎn)數(shù)(時(shí)間 戳)。而在WINDOWS中,第一次調(diào)用,返回的是進(jìn)程運(yùn)行的實(shí)際時(shí)間。而第二次之后的調(diào)用是自第一次調(diào)用以后到現(xiàn)在的運(yùn)行時(shí)間。(實(shí)際上是以WIN32 上QueryPerformanceCounter()為基礎(chǔ),它比毫秒表示更為精確)

budong@budongdeMacBook-Pro:/tmp$ cat clock.py
#!/usr/bin/env python
import time
if __name__ == '__main__':
    time.sleep(1)
    print "clock1:%s" % time.clock()
    time.sleep(1)
    print "clock2:%s" % time.clock()
    time.sleep(1)
    print "clock3:%s" % time.clock()

運(yùn)行腳本:
budong@budongdeMacBook-Pro:/tmp$ ./clock.py
clock1:0.059173
clock2:0.059299
clock3:0.059416

2.time.sleep(secs)

線程推遲指定的時(shí)間運(yùn)行
適合放在腳本里,定時(shí)sleep一會(huì)然后繼續(xù)干啥

In [138]: while True:
   .....:     time.sleep(3)
   .....:     print time.strftime('%H:%M:%S')
   .....:
17:21:35
17:21:38
17:21:41
17:21:44
……

3.time.localtime([secs])

將一個(gè)時(shí)間戳轉(zhuǎn)換成一個(gè)當(dāng)前時(shí)區(qū)的struct_time,如果seconds參數(shù)未輸入,則以當(dāng)前時(shí)間為轉(zhuǎn)換標(biāo)準(zhǔn)
未提供secs參數(shù)時(shí),按當(dāng)前時(shí)間為準(zhǔn)
In [141]: time.localtime()
Out[141]: time.struct_time(tm_year=2014, tm_mon=8, tm_mday=14, tm_hour=17, tm_min=23, tm_sec=48, tm_wday=3, tm_yday=226, tm_isdst=0)

提供secs為當(dāng)前時(shí)間戳?xí)r
In [142]: time.time()
Out[142]: 1408008232.217969
In [143]: time.localtime(time.time())
Out[143]: time.struct_time(tm_year=2014, tm_mon=8, tm_mday=14, tm_hour=17, tm_min=24, tm_sec=2, tm_wday=3, tm_yday=226, tm_isdst=0)

4.time.strftime(format[, t])

將指定的struct_time(默認(rèn)為當(dāng)前時(shí)間),根據(jù)指定的格式化字符串輸出
t未指定,傳入time.localtime()作為默認(rèn)參數(shù):
In [156]: time.strftime('%Y-%m-%d %H:%M:%S')
Out[156]: '2014-08-14 17:28:16’

指定t為time.localtime(1407945600.0)時(shí):
In [157]: time.localtime(1407945600.0)
Out[157]: time.struct_time(tm_year=2014, tm_mon=8, tm_mday=14, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=226, tm_isdst=0)

In [158]: time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(1407945600.0))
Out[158]: '2014-08-14 00:00:00’

5.time.time()

返回當(dāng)前時(shí)間的時(shí)間戳
In [161]: time.time()
Out[161]: 1408008711.730218

6.time.mktime(t)

將一個(gè)struct_time轉(zhuǎn)換為時(shí)間戳,如下time.localtime接收一個(gè)時(shí)間戳返回一個(gè)struct_time,而time.mktime接收一個(gè)struct_time,返回一個(gè)時(shí)間戳
In [159]: time.localtime(1407945600.0)
Out[159]: time.struct_time(tm_year=2014, tm_mon=8, tm_mday=14, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=226, tm_isdst=0)
In [160]: time.mktime(time.localtime(1407945600.0))
Out[160]: 1407945600.0

殘陽(yáng)似血的博客:http://qinxuye.me/article/details-about-time-module-in-python/

官方time模塊:http://python.me/library/time.html#module-time

datetime 模塊常用方法小記

datetime模塊常用的主要有下面這四個(gè)類:

1. datetime.date: 是指年月日構(gòu)成的日期(相當(dāng)于日歷)
2. datetime.time: 是指時(shí)分秒微秒構(gòu)成的一天24小時(shí)中的具體時(shí)間(相當(dāng)于手表)
3. datetime.datetime: 上面兩個(gè)合在一起,既包含時(shí)間又包含日期
4. datetime.timedelta: 時(shí)間間隔對(duì)象(timedelta)。一個(gè)時(shí)間點(diǎn)(datetime)加上一個(gè)時(shí)間間隔(timedelta)可以得到一個(gè)新的時(shí)間點(diǎn)(datetime)。比如今天的上午3點(diǎn)加上5個(gè)小時(shí)得到今天的上午8點(diǎn)。同理,兩個(gè)時(shí)間點(diǎn)相減會(huì)得到一個(gè)時(shí)間間隔。

1.datetime.date 類

1.新建一個(gè)date對(duì)象,日期為今天,既可以直接調(diào)用datetime.date.today(),也可以直接向datetime.date()傳值,如下:
In [4]: today = datetime.date.today()
In [5]: today
Out[5]: datetime.date(2014, 8, 15)
In [6]: t = datetime.date(2014,8,15)
In [7]: t
Out[7]: datetime.date(2014, 8, 15)

2.datetime.date.strftime(format) 格式化為需要的時(shí)間,如常用的 “年-月-日 小時(shí):分鐘:秒” 格式
In [8]: today.strftime('%Y-%m-%d %H:%M:%S')
Out[8]: '2014-08-15 00:00:00’
date對(duì)象中小時(shí)、分鐘、秒默認(rèn)都是0,紀(jì)元年的那個(gè)時(shí)間

3.datetime.date.timple() 轉(zhuǎn)成struct_time格式,這樣傳遞給time.mktime(t)  后,直接轉(zhuǎn)成時(shí)間戳格式
In [9]: today.timetuple()
Out[9]: time.struct_time(tm_year=2014, tm_mon=8, tm_mday=15, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=227, tm_isdst=-1)
In [10]: time.mktime(today.timetuple())
Out[10]: 1408032000.0

4.datetime.date.replace(year, month, day)  返回一個(gè)替換后的date對(duì)象
In [11]: today.replace(year=2013)
Out[11]: datetime.date(2013, 8, 15)

5.datetime.date.fromtimestamp(timestamp) 將時(shí)間戳轉(zhuǎn)化為date對(duì)象
In [12]: datetime.date.fromtimestamp(1408058729)
Out[12]: datetime.date(2014, 8, 15)

2.datetime.time 類

1.新建一個(gè)time對(duì)象
In [15]: t
Out[15]: datetime.time(8, 45, 20)

2.datetime.time.(format)格式化輸出
In [16]: t.strftime('%Y-%m-%d %H:%M:%S')
Out[16]: '1900-01-01 08:45:20’
time對(duì)應(yīng)的年、月、日為1900、01、01,紀(jì)元年的那個(gè)時(shí)間

3.datetime.time.replace([hour[, minute[, second[, microsecond[, tzinfo]]]]])  返回一個(gè)替換后的time對(duì)象
In [17]: t.replace(hour=9)
Out[17]: datetime.time(9, 45, 20)

3.datetime.datetime類

其實(shí)和date的那些方法差不多了,大概看以下,簡(jiǎn)單說(shuō)說(shuō)
1.新建一個(gè)datetime對(duì)象,日期為今天,既可以直接調(diào)用datetime.datetime.today(),也可以直接向datetime.datetime()傳值,如下:
In [21]: d1 = datetime.datetime.today()
In [22]: d1
Out[22]: datetime.datetime(2014, 8, 15, 8, 12, 34, 790945)
In [23]: d2 = datetime.datetime(2014, 8, 15, 8, 12, 34, 790945)
In [24]: d2
Out[24]: datetime.datetime(2014, 8, 15, 8, 12, 34, 790945)

2.datetime.datetime.now([tz]) 當(dāng)不指定時(shí)區(qū)時(shí),和datetime.datetime.today()是一樣的結(jié)果,如下
In [25]: datetime.datetime.now()
Out[25]: datetime.datetime(2014, 8, 15, 8, 14, 50, 738672)

3..datetime.datetime.strftime(format) 格式化為需要的時(shí)間,如常用的 “年-月-日 小時(shí):分鐘:秒” 格式
In [27]: d1
Out[27]: datetime.datetime(2014, 8, 15, 8, 12, 34, 790945)
In [28]: d1.strftime('%Y-%m-%d %H:%M:%S')
Out[28]: '2014-08-15 08:12:34’

4.datetime.datetime.timple() 轉(zhuǎn)成struct_time格式,這樣傳遞給time.mktime(t)  后,直接轉(zhuǎn)成時(shí)間戳格式
In [29]: d1
Out[29]: datetime.datetime(2014, 8, 15, 8, 12, 34, 790945)
In [30]: d1.timetuple()
Out[30]: time.struct_time(tm_year=2014, tm_mon=8, tm_mday=15, tm_hour=8, tm_min=12, tm_sec=34, tm_wday=4, tm_yday=227, tm_isdst=-1)
In [31]: time.mktime(d1.timetuple())
Out[31]: 1408061554.0

5.datetime.datetime.replace(year, month, day)  返回一個(gè)替換后的date對(duì)象
In [32]: d1
Out[32]: datetime.datetime(2014, 8, 15, 8, 12, 34, 790945)
In [33]: d1.replace(year=2000)
Out[33]: datetime.datetime(2000, 8, 15, 8, 12, 34, 790945)

6.datetime.datetime.fromtimestamp(timestamp) 將時(shí)間戳轉(zhuǎn)化為datetime對(duì)象
In [34]: time.time()
Out[34]: 1408061894.081552
In [35]: datetime.datetime.fromtimestamp(1408061894)
Out[35]: datetime.datetime(2014, 8, 15, 8, 18, 14)

4.datetime.timedelta類

沒(méi)啥好說(shuō)的,主要做時(shí)間的加減法用,如下:
In [78]: today = datetime.datetime.today()
In [79]: yesterday = today - datetime.timedelta(days=1)
In [80]: yesterday
Out[80]: datetime.datetime(2014, 8, 14, 15, 8, 25, 783471)
In [81]: today
Out[81]: datetime.datetime(2014, 8, 15, 15, 8, 25, 783471)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • time 在 Python 文檔里,time是歸類在Generic Operating System Servic...
    沐雨塵風(fēng)閱讀 3,535評(píng)論 0 4
  • 原文:http://www.ahlinux.com/python/12181.html 1 datetime模塊定...
    peimin閱讀 10,780評(píng)論 0 1
  • 出生時(shí),每個(gè)人都在竭力地放聲大哭,仿佛是為即將來(lái)臨的苦難而悲泣。 父母陪著我們從咿呀學(xué)語(yǔ)到長(zhǎng)...
    西西里的姑涼閱讀 156評(píng)論 0 0
  • 給你181201 十二月第一天,一八年的最后一個(gè)月,生活是需要一些儀式感的。而我的儀式感就好像是收集與記錄。以前覺(jué)...
    思茲念茲閱讀 224評(píng)論 0 1
  • 《六項(xiàng)精進(jìn)》打卡第15天 姓名:趙贊成 公司:寧波承迪文具有限公司 組別:樂(lè)觀二組 【知-學(xué)習(xí)】 背《大學(xué)》2遍,...
    趙贊成閱讀 255評(píng)論 0 0

友情鏈接更多精彩內(nèi)容