1. 程式人生 > >Python中calendar,time,datetime模組詳情解 -------18

Python中calendar,time,datetime模組詳情解 -------18

常用模組

  • 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