#15 time&datetime&calendar模組
前言
從這一節開始,記錄一些常用的內建模組,模組的學習可能比較無聊,但基礎就在這無聊的模組中,話不多說,本節記錄和時間相關的模組!
一、time模組
Python中設計時間的模組有很多,但是最常用的就是time模組了,先來看看time模組的所有方法:
In [3]: dir(time) Out[3]: ['CLOCK_MONOTONIC', 'CLOCK_MONOTONIC_RAW', 'CLOCK_PROCESS_CPUTIME_ID', 'CLOCK_REALTIME', 'CLOCK_THREAD_CPUTIME_ID', '_STRUCT_TM_ITEMS', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'altzone', 'asctime', 'clock', 'clock_getres', 'clock_gettime', 'clock_settime', 'ctime', 'daylight', 'get_clock_info', 'gmtime', 'localtime', 'mktime', 'monotonic', 'perf_counter', 'process_time', 'sleep', 'strftime', 'strptime', 'struct_time', 'time', 'timezone', 'tzname','tzset']
方法還不少呢,一點一點來剖析它
1.獲取時間
In [19]: time.time()#獲取當前時間的時間戳 Out[19]: 1549343780.962011 In [20]: time.localtime()# 獲取當地時間,返回當地時間下的時間元組,可是設定是否為夏令時,tm_isdst為夏令時 Out[20]: time.struct_time(tm_year=2019, tm_mon=2, tm_mday=5, tm_hour=13, tm_min=16, tm_sec=27, tm_wday=1, tm_yday=36, tm_isdst=0) In [21]: time.localtime(time.time())# 引數接受為時間戳 Out[21]: time.struct_time(tm_year=2019, tm_mon=2, tm_mday=5, tm_hour=13, tm_min=16, tm_sec=39, tm_wday=1, tm_yday=36, tm_isdst=0) In [22]: time.asctime()# 獲取格式化時間 Out[22]: 'Tue Feb5 13:17:23 2019' In [23]: time.asctime(time.localtime())# 引數為struct_time格式 Out[23]: 'Tue Feb5 13:17:40 2019' In [24]: time.ctime()# 獲取格式化時間,同上 Out[24]: 'Tue Feb5 13:18:11 2019' In [25]: time.gmtime()# 同localtime,但返回格林威治天文時間下的時間元組 Out[25]: time.struct_time(tm_year=2019, tm_mon=2, tm_mday=5, tm_hour=5, tm_min=18, tm_sec=18, tm_wday=1, tm_yday=36, tm_isdst=0)
2.格式化日期
In [28]: time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())# 格式化成 年-月-日 時:分:秒 形式 Out[28]: '2019-02-05 13:26:27' In [29]: time.strftime("%a %b %d %H:%M:%S %Y", time.localtime()) # 格式化成周 月 日 時:分:秒 年 形式 Out[29]: 'Tue Feb 05 13:26:47 2019'
In [33]: time.gmtime(time.time())# 將時間戳轉換為struct_time格式 Out[33]: time.struct_time(tm_year=2019, tm_mon=2, tm_mday=5, tm_hour=5, tm_min=40, tm_sec=15, tm_wday=1, tm_yday=36, tm_isdst=0) In [34]: time.mktime(time.localtime())# 將struct_time格式轉換為時間戳 Out[34]: 1549345233.0
In [35]: time.strptime("2019/02/05","%Y/%m/%d")# 將格式化日期轉換為struct_time格式 Out[35]: time.struct_time(tm_year=2019, tm_mon=2, tm_mday=5, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=36, tm_isdst=-1)
補充:time模組日期格式化符號
%y# 兩位數的年份表示(00-99) %Y# 四位數的年份表示(000-9999) %m# 月份(01-12) %d# 月內中的一天(0-31) %H# 24小時制小時數(0-23) %I# 12小時制小時數(01-12) %M# 分鐘數(00=59) %S# 秒(00-59) %a# 本地簡化星期名稱 %A# 本地完整星期名稱 %b# 本地簡化的月份名稱 %B# 本地完整的月份名稱 %c# 本地相應的日期表示和時間表示 %j# 年內的一天(001-366) %p# 本地A.M.或P.M.的等價符 %U# 一年中的星期數(00-53)星期天為星期的開始 %w# 星期(0-6),星期天為星期的開始 %W# 一年中的星期數(00-53)星期一為星期的開始 %x# 本地相應的日期表示 %X# 本地相應的時間表示 %Z# 當前時區的名稱 %%# %號本身
3.睡眠
In [36]: time.sleep(3)# 使用time.sleep(秒數)來達到睡眠
4.其他方法
In [37]: time.altzone# 返回格林威治西部的夏令時地區的偏移秒數。如果該地區在格林威治東部會返回負值(如西歐,包括英國)。對夏令時啟用地區才能使用 Out[37]: -28800 In [38]: time.clock()# 以浮點數計算的秒數返回當前的CPU時間,用來衡量不同程式的耗時 Out[38]: 10.241939 In [39]: time.timezone# 當地時區(未啟動夏令時)距離格林威治的偏移秒數(>0,美洲;<=0大部分歐洲,亞洲,非洲) Out[39]: -28800 In [40]: time.tzname# 包含一對根據情況的不同而不同的字串,分別是帶夏令時的本地時區名稱,和不帶的 Out[40]: ('CST', 'CST')
二、datetime模組
datetime模組相比於time模組並不常用,但還是要了解它
In [42]: datetime.datetime.now()# 獲取當前時間,直接返回格式化後的時間格式,比較人性化 Out[42]: datetime.datetime(2019, 2, 5, 13, 56, 28, 929415) In [43]: datetime.datetime.now() + datetime.timedelta(5)# 當前時間加5天,預設單位是天 Out[43]: datetime.datetime(2019, 2, 10, 14, 1, 14, 324972) In [44]: datetime.datetime.now() + datetime.timedelta(-5)# 當前時間減5天 Out[44]: datetime.datetime(2019, 1, 31, 14, 1, 21, 15534) In [45]: datetime.datetime.now() + datetime.timedelta(hours=5)# 當前時間加5小時 Out[45]: datetime.datetime(2019, 2, 5, 19, 1, 33, 334723) In [46]: datetime.datetime.now() + datetime.timedelta(minutes=5) # 當前時間加5分鐘 Out[46]: datetime.datetime(2019, 2, 5, 14, 6, 46, 123465)
可以看到datetime模組常用來作日期的加減計算,這方面很有優勢
三、calendar模組
In [9]: import calendar In [11]: print(calendar.calendar(2019))# calendar.calendar(year,w=2,l=1,c=6),返回一個多行字串格式的year年年曆,3個月一行,間隔距離為c=6,每日寬度間隔為w=2字元,每行長度為21* W+18+2* C,l=1是每星期行數。 2019 JanuaryFebruaryMarch Mo Tu We Th Fr Sa SuMo Tu We Th Fr Sa SuMo Tu We Th Fr Sa Su 123456123123 789 10 11 12 13456789 10456789 10 14 15 16 17 18 19 2011 12 13 14 15 16 1711 12 13 14 15 16 17 21 22 23 24 25 26 2718 19 20 21 22 23 2418 19 20 21 22 23 24 28 29 30 3125 26 27 2825 26 27 28 29 30 31 AprilMayJune Mo Tu We Th Fr Sa SuMo Tu We Th Fr Sa SuMo Tu We Th Fr Sa Su 12345671234512 89 10 11 12 13 146789 10 11 123456789 15 16 17 18 19 20 2113 14 15 16 17 18 1910 11 12 13 14 15 16 22 23 24 25 26 27 2820 21 22 23 24 25 2617 18 19 20 21 22 23 29 3027 28 29 30 3124 25 26 27 28 29 30 JulyAugustSeptember Mo Tu We Th Fr Sa SuMo Tu We Th Fr Sa SuMo Tu We Th Fr Sa Su 123456712341 89 10 11 12 13 1456789 10 112345678 15 16 17 18 19 20 2112 13 14 15 16 17 189 10 11 12 13 14 15 22 23 24 25 26 27 2819 20 21 22 23 24 2516 17 18 19 20 21 22 29 30 3126 27 28 29 30 3123 24 25 26 27 28 29 30 OctoberNovemberDecember Mo Tu We Th Fr Sa SuMo Tu We Th Fr Sa SuMo Tu We Th Fr Sa Su 1234561231 789 10 11 12 13456789 102345678 14 15 16 17 18 19 2011 12 13 14 15 16 179 10 11 12 13 14 15 21 22 23 24 25 26 2718 19 20 21 22 23 2416 17 18 19 20 21 22 28 29 30 3125 26 27 28 29 3023 24 25 26 27 28 29 30 31
In [12]: calendar.firstweekday()# 返回每週的第一天,0代表週一 Out[12]: 0 In [13]: calendar.isleap(2004)# 測試是否為閏月年 Out[13]: True In [14]: calendar.isleap(2019) Out[14]: False In [15]: print(calendar.month(2019,1))# calendar.month(year,month,w=2,l=1),返回一個多行字串格式的year年month月日曆,兩行標題,一週一行,每日寬度間隔為w=2字元每行的長度為7* w+6,l=1是每星期的行數。 January 2019 Mo Tu We Th Fr Sa Su 123456 789 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
calendar掌握這麼多就差不多了,如果需要檢視其他方法,檢視其幫助資訊即可。