Python中calendar,time,datetime模組詳情解 -------18
阿新 • • 發佈:2019-01-04
常用模組
- calendar
- time
- datetime
- os
- shutil
- zip
- math
- string
- 上述使用理論上都應該先匯入,string是特例
- calendar,time,datetime的區別參考中文意思
calendar
- 跟日曆相關的模組
- calendar:獲取一年的日曆字串
- 引數
- w = 每個日期之間的間隔字元數
- l = 每週所佔用的行數
- c = 每個月之間的間隔字元數
In [6]:
#使用前先匯入
import calendar
cal = calendar.calendar(2018)
print(cal)
print(type(cal))
2018 January February March Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 1 2 3 4 1 2 3 4 8 9 10 11 12 13 14 5 6 7 8 9 10 11 5 6 7 8 9 10 11 15 16 17 18 19 20 21 12 13 14 15 16 17 18 12 13 14 15 16 17 18 22 23 24 25 26 27 28 19 20 21 22 23 24 25 19 20 21 22 23 24 25 29 30 31 26 27 28 26 27 28 29 30 31 April May June Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 1 2 3 4 5 6 1 2 3 2 3 4 5 6 7 8 7 8 9 10 11 12 13 4 5 6 7 8 9 10 9 10 11 12 13 14 15 14 15 16 17 18 19 20 11 12 13 14 15 16 17 16 17 18 19 20 21 22 21 22 23 24 25 26 27 18 19 20 21 22 23 24 23 24 25 26 27 28 29 28 29 30 31 25 26 27 28 29 30 30 July August September Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 1 2 3 4 5 1 2 2 3 4 5 6 7 8 6 7 8 9 10 11 12 3 4 5 6 7 8 9 9 10 11 12 13 14 15 13 14 15 16 17 18 19 10 11 12 13 14 15 16 16 17 18 19 20 21 22 20 21 22 23 24 25 26 17 18 19 20 21 22 23 23 24 25 26 27 28 29 27 28 29 30 31 24 25 26 27 28 29 30 30 31 October November December Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 1 2 3 4 1 2 8 9 10 11 12 13 14 5 6 7 8 9 10 11 3 4 5 6 7 8 9 15 16 17 18 19 20 21 12 13 14 15 16 17 18 10 11 12 13 14 15 16 22 23 24 25 26 27 28 19 20 21 22 23 24 25 17 18 19 20 21 22 23 29 30 31 26 27 28 29 30 24 25 26 27 28 29 30 31 <class 'str'>
In [8]:
cal = calendar.calendar(2018,l = 0 ,c = 5)
print(cal)
2018 January February March Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 1 2 3 4 1 2 3 4 8 9 10 11 12 13 14 5 6 7 8 9 10 11 5 6 7 8 9 10 11 15 16 17 18 19 20 21 12 13 14 15 16 17 18 12 13 14 15 16 17 18 22 23 24 25 26 27 28 19 20 21 22 23 24 25 19 20 21 22 23 24 25 29 30 31 26 27 28 26 27 28 29 30 31 April May June Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 1 2 3 4 5 6 1 2 3 2 3 4 5 6 7 8 7 8 9 10 11 12 13 4 5 6 7 8 9 10 9 10 11 12 13 14 15 14 15 16 17 18 19 20 11 12 13 14 15 16 17 16 17 18 19 20 21 22 21 22 23 24 25 26 27 18 19 20 21 22 23 24 23 24 25 26 27 28 29 28 29 30 31 25 26 27 28 29 30 30 July August September Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 1 2 3 4 5 1 2 2 3 4 5 6 7 8 6 7 8 9 10 11 12 3 4 5 6 7 8 9 9 10 11 12 13 14 15 13 14 15 16 17 18 19 10 11 12 13 14 15 16 16 17 18 19 20 21 22 20 21 22 23 24 25 26 17 18 19 20 21 22 23 23 24 25 26 27 28 29 27 28 29 30 31 24 25 26 27 28 29 30 30 31 October November December Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 1 2 3 4 1 2 8 9 10 11 12 13 14 5 6 7 8 9 10 11 3 4 5 6 7 8 9 15 16 17 18 19 20 21 12 13 14 15 16 17 18 10 11 12 13 14 15 16 22 23 24 25 26 27 28 19 20 21 22 23 24 25 17 18 19 20 21 22 23 29 30 31 26 27 28 29 30 24 25 26 27 28 29 30 31
In [10]:
#isleap: 判斷某一年是否為閏年
calendar.isleap(2000)
Out[10]:
True
In [14]:
#leapdays:獲取指定年份之間的閏年個數
calendar.leapdays(2000,2018)# 包含左邊不包含右邊
Out[14]:
5
In [17]:
#mouth()獲取某個月的日曆字串
#格式:calendar.month(2018,3)
m3 = calendar.month(2018,3)
print(m3)
March 2018 Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
In [19]:
# monthrange()獲取一個月的周幾開始和天數
#格式:calendar.monthrange(年,月)
#回值:元組(周幾開始,總天數)
#注意:周預設0——6表示週一到周天
t = calendar.monthrange(2018,3)
print(t)
(3, 31)
In [22]:
# monthcalendar()獲取一個月每天的矩陣列表
#格式:calendar.monthcalendar(年,月)
#回值:二級列表
#注意:矩陣中沒有天數用0 表示
m = calendar.monthcalendar(2018,3)
print(m)
[[0, 0, 0, 1, 2, 3, 4], [5, 6, 7, 8, 9, 10, 11], [12, 13, 14, 15, 16, 17, 18], [19, 20, 21, 22, 23, 24, 25], [26, 27, 28, 29, 30, 31, 0]]
In [26]:
#prcal:直接列印日曆
calendar.prcal(2018)
help(calendar.prcal)
2018 January February March Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 1 2 3 4 1 2 3 4 8 9 10 11 12 13 14 5 6 7 8 9 10 11 5 6 7 8 9 10 11 15 16 17 18 19 20 21 12 13 14 15 16 17 18 12 13 14 15 16 17 18 22 23 24 25 26 27 28 19 20 21 22 23 24 25 19 20 21 22 23 24 25 29 30 31 26 27 28 26 27 28 29 30 31 April May June Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 1 2 3 4 5 6 1 2 3 2 3 4 5 6 7 8 7 8 9 10 11 12 13 4 5 6 7 8 9 10 9 10 11 12 13 14 15 14 15 16 17 18 19 20 11 12 13 14 15 16 17 16 17 18 19 20 21 22 21 22 23 24 25 26 27 18 19 20 21 22 23 24 23 24 25 26 27 28 29 28 29 30 31 25 26 27 28 29 30 30 July August September Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 1 2 3 4 5 1 2 2 3 4 5 6 7 8 6 7 8 9 10 11 12 3 4 5 6 7 8 9 9 10 11 12 13 14 15 13 14 15 16 17 18 19 10 11 12 13 14 15 16 16 17 18 19 20 21 22 20 21 22 23 24 25 26 17 18 19 20 21 22 23 23 24 25 26 27 28 29 27 28 29 30 31 24 25 26 27 28 29 30 30 31 October November December Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 1 2 3 4 1 2 8 9 10 11 12 13 14 5 6 7 8 9 10 11 3 4 5 6 7 8 9 15 16 17 18 19 20 21 12 13 14 15 16 17 18 10 11 12 13 14 15 16 22 23 24 25 26 27 28 19 20 21 22 23 24 25 17 18 19 20 21 22 23 29 30 31 26 27 28 29 30 24 25 26 27 28 29 30 31 Help on method pryear in module calendar: pryear(theyear, w=0, l=0, c=6, m=3) method of calendar.TextCalendar instance Print a year's calendar.
In [27]:
#prmonth()直接列印整個月的日曆
#格式:calendar.prmonth(年,月)
#返回值:無
calendar.prmonth(2019,1)
January 2019 Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
In [29]:
#weekday()獲取周幾
#格式:calendar.weekday(年,月,日)
#返回值:周幾對應的數字
calendar.weekday(2019,1,4) #從0 開始代表週一
Out[29]:
4
time 模組
時間戳
- 一個時間的表示,根據不同的語言,可以是整數或者浮點數
- 是從1970年1月1日0時0分0秒到現在經歷的秒數
- 如果是表示1970年以前或者更遙遠的未來,可能出現異常
- 32位作業系統能夠支援到2038年
UTC時間
- 世界標準時間
- 中國為UTC+8 東八分割槽
夏令時
- 夏天將時間調快一個小時
時間元組
一個包含時間內容的普通元組
欄位 屬性 值
4位年數 tm_year 2017
月 tm_mon 1到12
日 tm_mday 1到31
小時 tm_hour 0到23
分鐘 tm_min 0到59
秒 tm_sec 0到61(60或61是潤秒)
一週的第幾日 tm_wday 0到6(0是週一)
一年的第幾日 tm_yday 1到366,一年中的第幾天
夏令時 tm_isdst 是否為夏令時,值為1時是夏令時,值為0時不是夏令時,預設為-1
In [30]:
#匯入
import time
In [35]:
#時間模組的屬性
#timezone :當前時區和UTC時間相差的秒數,在沒有夏令時的情況下的間隔,東八區是-28800
#altzone:當前時區和UTC時間相差的秒數,在有夏令時的情況下的間隔
#daylight:測當前是否是夏令時時間狀態,0代表是
print(time.timezone)
print(time.altzone)
print(time.daylight)
-28800 -28800 0
In [36]:
#得到時間戳
time.time()
Out[36]:
1545841360.1504376
In [38]:
#返回當前時間
t = time.localtime()
print(t)
print(t.tm_year)
time.struct_time(tm_year=2018, tm_mon=12, tm_mday=27, tm_hour=0, tm_min=24, tm_sec=14, tm_wday=3, tm_yday=361, tm_isdst=0) 2018
In [39]:
#asctime()返回元組的正常字串化後的時間格式
t = time.localtime()
tt = time.asctime(t)
print(tt)
Thu Dec 27 00:25:58 2018
In [40]:
# ctime:獲取字串化的當前時間
t = time.ctime()
print(t)
Thu Dec 27 00:27:18 2018
In [41]:
#mktime()使用時間元組獲取相應的時間戳
#格式: time.mktime(時間元組)
#返回值:浮點數時間戳
lt = time.localtime()
ts = time.mktime(lt)
print(type(ts))
print(ts)
<class 'float'> 1545841845.0
In [ ]:
#clock:獲取CPU時間
In [45]:
#sleep:使程序進入睡眠狀態,n秒後繼續
for i in range(10):
print(i)
time.sleep(1)
0 1 2 3 4 5 6 7 8 9
In [60]:
print('hahahaha')
hahahaha
strftime:將時間元組轉化為自定義字串格式
-python中時間日期格式化符號:
格式 含義
%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 當前時區的名稱
%% %號本身
In [51]:
#把時間格式表示成 年,月,日 時 的格式
t = time.localtime()
ft = time.strftime('%Y年%m月%d日 %H:%M',t)
print(ft)
2018年12月27日 00:49
datetime模組
- 提供日期和時間的運算和表達
- 常見屬性
- datetime.data :提供年,月,日 屬性
- datetime.time :hour,minute,sec等
- datetime.datetime:提供日期跟時間的組合
- datetime.timedelta:提供一個時間差,時間長度
In [57]:
import datetime
print(datetime.date(2018,3,3))
print(datetime.time(3,3,3))
2018-03-03 03:03:03
In [59]:
#datetime.timedelta
from datetime import datetime,timedelta
t1 = datetime.now()#得到當前時間
print(t1.strftime('%Y年%m月%d日 %H:%M'))
td = timedelta(hours = 1)#表示一個小時的時間間隔
print((t1 +td).strftime('%Y年%m月%d日 %H:%M'))
2018年12月27日 01:09 2018年12月27日 02:09
In [62]:
#測量程式執行時間間隔實驗
t0 = time.time()
time.sleep(3)
t1 = time.time()
print(t1 - t0)
3.003554344177246
In [65]:
# timeit-時間測量工具
#生成列表的兩種方式的比較
import timeit
c = '''
sum =[]
for i in range(1000):
sum.append(i)
'''
#利用timeit呼叫程式碼,執行100000次,檢視執行時間
t1 = timeit.timeit(stmt='[i for i in range(1000)]',number = 100000)
#測量程式碼c 執行100000次執行結果
t2 = timeit.timeit(stmt=c,number=100000)
print(t1)
print(t2)
3.176306335022673 7.545649177976884
In [67]:
help(timeit.timeit)
Help on function timeit in module timeit: timeit(stmt='pass', setup='pass', timer=<built-in function perf_counter>, number=1000000, globals=None) Convenience function to create Timer object and call timeit method.
In [69]:
# 測量一個函式的執行時間
def Doit():
num = 3
for i in range(num):
print('This is {0}'.format(i))
#函式重複執行5次
t = timeit.timeit(stmt = Doit,number = 5)
print(t)
This is 0 This is 1 This is 2 This is 0 This is 1 This is 2 This is 0 This is 1 This is 2 This is 0 This is 1 This is 2 This is 0 This is 1 This is 2 0.02160664601251483
In [73]:
s = '''
def Doit(num):
for i in range(num):
print('This is {0}'.format(i))
'''#形如字串,實際上還是程式碼
#執行Doit(num)
#setup負責把環境變數準備好,把num=3傳入程式碼
t = timeit.timeit('Doit(num)',setup=s+'num=3',number = 5)
print(t)
#函式執行順序
"""
首先定義函式:def Doit(num):
...
然後傳入引數:num = 3
最後執行:Doit(num)
"""
This is 0 This is 1 This is 2 This is 0 This is 1 This is 2 This is 0 This is 1 This is 2 This is 0 This is 1 This is 2 This is 0 This is 1 This is 2 0.009518415026832372