python 最麻煩的時間有藥了

來源:互聯網
上載者:User

標籤:預設參數   mktime   def   struct   form   指令碼   ecs   date()   while   

https://www.cnblogs.com/sunshineyang/p/6818834.html

一:經常使用的時間方法

1.得到目前時間

使用time模組,首先得到當前的時間戳記In [42]: time.time()Out[42]: 1408066927.208922將時間戳記轉換為時間元組 struct_timeIn [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)格式化輸出想要的時間In [44]: time.strftime(‘%Y-%m-%d %H:%M:%S‘,time.localtime(time.time()))Out[44]: ‘2014-08-15 09:43:04‘接上文,不加參數時,預設就是輸出當前的時間In [48]: time.strftime(‘%Y-%m-%d %H:%M:%S‘)Out[48]: ‘2014-08-15 09:46:53’當然也可以透過datetime模組來實現,如下: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’同時,也可以只使用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.擷取時間差,計算程式的執行時間等:
使用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).seconds6


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

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

4.時間元組 struct_time轉化為時間戳記
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也挺有用的,將時間字串轉換為時間元組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模組常用方法簡介

表示時間的兩種方式:

1. 時間戳記(相對於1970.1.1 00:00:00以秒計算的位移量),時間戳記是惟一的2. 時間元組 即(struct_time),共有九個元素,分別表示,同一個時間戳記的struct_time會因為時區不同而不同

time 模組常用方法小記

1.time.clock()

這個需要注意,在不同的系統上含義不同。在UNIX系統上,它返回的是“進程時間”,它是用秒錶示的浮點數(時間 戳)。而在WINDOWS中,第一次調用,返回的是進程啟動並執行實際時間。而第二次之後的調用是自第一次調用以後到現在的已耗用時間。(實際上是以WIN32 上QueryPerformanceCounter()為基礎,它比毫秒錶示更為精確)[email protected]:/tmp$ cat clock.py#!/usr/bin/env pythonimport timeif __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()運行指令碼:[email protected]:/tmp$ ./clock.pyclock1:0.059173clock2:0.059299clock3:0.059416


2.time.sleep(secs)

線程延遲指定的時間運行適合放在指令碼裡,定時sleep一會然後繼續幹啥In [138]: while True:   .....:     time.sleep(3)   .....:     print time.strftime(‘%H:%M:%S‘)   .....:17:21:3517:21:3817:21:4117:21:44……

3.time.localtime([secs])

將一個時間戳記轉換成一個當前時區的struct_time,如果seconds參數未輸入,則以目前時間為轉換標準未提供secs參數時,按目前時間為準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為目前時間戳時In [142]: time.time()Out[142]: 1408008232.217969In [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(預設為目前時間),根據指定的格式化字串輸出t未指定,傳入time.localtime()作為預設參數:In [156]: time.strftime(‘%Y-%m-%d %H:%M:%S‘)Out[156]: ‘2014-08-14 17:28:16’指定t為time.localtime(1407945600.0)時: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()

返回目前時間的時間戳記In [161]: time.time()Out[161]: 1408008711.730218

6.time.mktime(t)

將一個struct_time轉換為時間戳記,如下time.localtime接收一個時間戳記返回一個struct_time,而time.mktime接收一個struct_time,返回一個時間戳記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殘陽似血的部落格:<http://qinxuye.me/article/details-about-time-module-in-python/> 官方time模組:<http://python.me/library/time.html#module-time>


##datetime 模組常用方法小記

datetime模組常用的主要有下面這四個類:

1. datetime.date: 是指年月日構成的日期(相當於日曆)2. datetime.time: 是指時分秒微秒構成的一天24小時中的具體時間(相當於手錶)3. datetime.datetime: 上面兩個合在一起,既包含時間又包含日期4. datetime.timedelta: 時間間隔對象(timedelta)。一個時間點(datetime)加上一個時間間隔(timedelta)可以得到一個新的時間點(datetime)。比如今天的上午3點加上5個小時得到今天的上午8點。同理,兩個時間點相減會得到一個時間間隔。


1.datetime.date 類

1.建立一個date對象,日期為今天,既可以直接調用datetime.date.today(),也可以直接向datetime.date()傳值,如下:In [4]: today = datetime.date.today()In [5]: todayOut[5]: datetime.date(2014, 8, 15)In [6]: t = datetime.date(2014,8,15)In [7]: tOut[7]: datetime.date(2014, 8, 15)2.datetime.date.strftime(format) 格式化為需要的時間,如常用的 “年-月-日 小時:分鐘:秒” 格式In [8]: today.strftime(‘%Y-%m-%d %H:%M:%S‘)Out[8]: ‘2014-08-15 00:00:00’date對象中小時、分鐘、秒預設都是0,紀元年的那個時間3.datetime.date.timple() 轉成struct_time格式,這樣傳遞給time.mktime(t)  後,直接轉成時間戳記格式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.04.datetime.date.replace(year, month, day)  返回一個替換後的date對象In [11]: today.replace(year=2013)Out[11]: datetime.date(2013, 8, 15)5.datetime.date.fromtimestamp(timestamp) 將時間戳記轉化為date對象In [12]: datetime.date.fromtimestamp(1408058729)Out[12]: datetime.date(2014, 8, 15)


2.datetime.time 類

1.建立一個time對象In [15]: tOut[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對應的年、月、日為1900、01、01,紀元年的那個時間3.datetime.time.replace([hour[, minute[, second[, microsecond[, tzinfo]]]]])  返回一個替換後的time對象In [17]: t.replace(hour=9)Out[17]: datetime.time(9, 45, 20)


3.datetime.datetime類

其實和date的那些方法差不多了,大概看以下,簡單說說1.建立一個datetime對象,日期為今天,既可以直接調用datetime.datetime.today(),也可以直接向datetime.datetime()傳值,如下:In [21]: d1 = datetime.datetime.today()In [22]: d1Out[22]: datetime.datetime(2014, 8, 15, 8, 12, 34, 790945)In [23]: d2 = datetime.datetime(2014, 8, 15, 8, 12, 34, 790945)In [24]: d2Out[24]: datetime.datetime(2014, 8, 15, 8, 12, 34, 790945)2.datetime.datetime.now([tz]) 當不指定時區時,和datetime.datetime.today()是一樣的結果,如下In [25]: datetime.datetime.now()Out[25]: datetime.datetime(2014, 8, 15, 8, 14, 50, 738672)3..datetime.datetime.strftime(format) 格式化為需要的時間,如常用的 “年-月-日 小時:分鐘:秒” 格式In [27]: d1Out[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() 轉成struct_time格式,這樣傳遞給time.mktime(t)  後,直接轉成時間戳記格式In [29]: d1Out[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.05.datetime.datetime.replace(year, month, day)  返回一個替換後的date對象In [32]: d1Out[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) 將時間戳記轉化為datetime對象In [34]: time.time()Out[34]: 1408061894.081552In [35]: datetime.datetime.fromtimestamp(1408061894)Out[35]: datetime.datetime(2014, 8, 15, 8, 18, 14)

4.datetime.timedelta類

沒啥好說的,主要做時間的加減法用,如下:In [78]: today = datetime.datetime.today()In [79]: yesterday = today - datetime.timedelta(days=1)In [80]: yesterdayOut[80]: datetime.datetime(2014, 8, 14, 15, 8, 25, 783471)In [81]: todayOut[81]: datetime.datetime(2014, 8, 15, 15, 8, 25, 783471)

python 最麻煩的時間有藥了

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.