小白學 Python(22):time 和 calendar 模組簡單使用
人生苦短,我選Python
前文傳送門
小白學 Python(1):開篇
小白學 Python(2):基礎資料型別(上)
小白學 Python(3):基礎資料型別(下)
小白學 Python(4):變數基礎操作
小白學 Python(5):基礎運算子(上)
小白學 Python(6):基礎運算子(下)
小白學 Python(7):基礎流程控制(上)
小白學 Python(8):基礎流程控制(下)
小白學 Python(9):基礎資料結構(列表)(上)
小白學 Python(10):基礎資料結構(列表)(下)
小白學 Python(11):基礎資料結構(元組)
小白學 Python(12):基礎資料結構(字典)(上)
小白學 Python(13):基礎資料結構(字典)(下)
小白學 Python(14):基礎資料結構(集合)(上)
小白學 Python(15):基礎資料結構(集合)(下)
小白學 Python(16):基礎資料型別(函式)(上)
小白學 Python(17):基礎資料型別(函式)(下)
小白學 Python(18):基礎檔案操作
小白學 Python(18):基礎檔案操作
小白學 Python(19):基礎異常處理
小白學 Python(20):迭代器基礎
小白學 Python(21):生成器基礎
time 模組
今天我們要介紹的是一個會經常用到的模組—— time
,顧名思義,這是一個時間相關的模組。前面我們也介紹過常用模組,比如 os
time
模組的匯入方式如下:
import time
先來一個簡單的樣例吧:
for i in range(0, 5):
print(i)
time.sleep(1)
列印結果我就不展示了,同學們應該都猜得到。那麼 time.sleep(1)
這句話的作用是什麼呢?
sleep()
方法是一個睡眠方法,意思就是程式執行到這裡,需要等待一會,什麼都不做,上面的程式碼在執行的時候可以發現,每隔 1s 會列印一個數字, sleep()
裡面給出的引數是休眠的時間,單位是秒。
time 模組的常用方法
首當其衝當然是獲取當前的時間戳。
print(time.time())
結果如下:
1573054874.6483195
這裡就看不懂了哇,我先來解釋下什麼是時間戳。
在程式中,一般已1970年1月1日0時0分0秒作為起始時間,時間戳就是從起始時間到現在的時長,在 Python
中,這個時長的單位是秒。那麼為什麼起始時間是1970年1月1日0時0分0秒呢?
emmmmmmmmmmmmm,這個我還真不知道,據我所瞭解的語言,所有的時間戳都是從這個時間點開始起算的。我順手幫各位同學百度了下,表示並沒有找到答案。
不要糾結這個問題了,我們看下一個。
print(time.localtime())
結果如下:
time.struct_time(tm_year=2019, tm_mon=11, tm_mday=6, tm_hour=23, tm_min=47, tm_sec=13, tm_wday=2, tm_yday=310, tm_isdst=0)
這個方法會給出詳細的當前的本地時間,可以細化到年、月、日、小時、分鐘、秒等。
注意: 這個時間是當前本地的計算的時間哦,如果修改計算機的時間,這個值會發生相應的改變的。
print(time.mktime(time.localtime()))
結果如下:
1573055380.0
各位同學看著列印結果應該已經猜到了, mktime()
可以將當前的本地時間轉化為一個時間戳。
以上不管是時間戳、還是本地時間,看起來並不方便,下面我們介紹如何格式化時間。
最簡單的方法,可以使用函式 asctime()
。
print(time.asctime(time.localtime()))
結果如下:
Wed Nov 6 23:53:52 2019
這個結果還帶著英文,並不符合中國人的習慣嘛,別急,我們還可以自定義格式。
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
結果如下:
2019-11-06 23:55:56
這樣看著就舒服多了麼,我們可以通過 strftime()
來自定義日期格式。
這裡列舉一下日期格式化的符號:
- %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 當前時區的名稱
- %% %號本身
哇,這也太多了,記不住怎麼辦?
其實這個並不需要你都記下來,只需要記住常用的就好了,就比如我上面使用的年、月、日、時、分、秒。其餘的不常用的可以在有需要的時候再來查表。
有時候時間之間不使用短橫槓 -
來隔開,而選擇使用斜槓 /
隔開,這個怎麼辦?
這個很簡單咯,看我的:
print(time.strftime("%Y/%m/%d %H:%M:%S", time.localtime()))
結果如下:
2019/11/07 00:02:18
calendar 模組
都聊到這裡了,我們順便再聊一個模組,日曆。
先看下程式碼演示吧,這個就比較有意思了:
import calendar
print(calendar.calendar(theyear=2020, w=2, l=1, c=6))
結果如下:
2020
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 1 2 1
6 7 8 9 10 11 12 3 4 5 6 7 8 9 2 3 4 5 6 7 8
13 14 15 16 17 18 19 10 11 12 13 14 15 16 9 10 11 12 13 14 15
20 21 22 23 24 25 26 17 18 19 20 21 22 23 16 17 18 19 20 21 22
27 28 29 30 31 24 25 26 27 28 29 23 24 25 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 2 3 4 5 1 2 3 1 2 3 4 5 6 7
6 7 8 9 10 11 12 4 5 6 7 8 9 10 8 9 10 11 12 13 14
13 14 15 16 17 18 19 11 12 13 14 15 16 17 15 16 17 18 19 20 21
20 21 22 23 24 25 26 18 19 20 21 22 23 24 22 23 24 25 26 27 28
27 28 29 30 25 26 27 28 29 30 31 29 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 2 3 4 5 1 2 1 2 3 4 5 6
6 7 8 9 10 11 12 3 4 5 6 7 8 9 7 8 9 10 11 12 13
13 14 15 16 17 18 19 10 11 12 13 14 15 16 14 15 16 17 18 19 20
20 21 22 23 24 25 26 17 18 19 20 21 22 23 21 22 23 24 25 26 27
27 28 29 30 31 24 25 26 27 28 29 30 28 29 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 1 1 2 3 4 5 6
5 6 7 8 9 10 11 2 3 4 5 6 7 8 7 8 9 10 11 12 13
12 13 14 15 16 17 18 9 10 11 12 13 14 15 14 15 16 17 18 19 20
19 20 21 22 23 24 25 16 17 18 19 20 21 22 21 22 23 24 25 26 27
26 27 28 29 30 31 23 24 25 26 27 28 29 28 29 30 31
30
我們把 2020 年的日曆打印出來了。
- w = 每個日期之間的間隔字元數
- l = 每週所佔用的行數
- c = 每個月之間的間隔字元數
以後我們看日曆可以使用這個函式看了。
要用你們用,反正我是不用,我選擇使用這個:
除了直接返回全年的日曆,calendar 還支援返回指定月份的日曆:
print(calendar.month(2019, 11))
結果如下:
November 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
我們還可以直接獲得某月的總天數:
print(calendar.monthlen(2019, 11))
結果如下:
30
這個功能好像有點雞肋,我們獲取某月的天數難道不是都靠那句兒歌麼?
一三五七八十臘,三十一天永不差
我們還可以知道指定的日期對應的星期數:
print(calendar.weekday(2019, 11, 7))
結果如下:
3
這個我覺得蠻實用的,再也不用自己寫演算法去推算了。
示例程式碼
本系列的所有程式碼小編都會放在程式碼管理倉庫 Github 和 Gitee 上,方便大家取用。
示例程式碼-Github
示例程式碼-Gi