1. 程式人生 > 實用技巧 >datetime模組(轉載)

datetime模組(轉載)

datetime模組

前言:datetime模組一般用來對時間進行計算,比如現在的兩小時後是什麼時間,幾年幾月,2050年的3月1日的前一天是幾月幾日等等。

在正題開始之前我先讓大家明白閏年和平年是怎麼計算的。

  • 閏年:將年份除以4沒有餘數則為閏年,閏年的二月有29天
  • 平年:將年份除以4有餘數則為平年,平年的二月有28天

搞清楚datetime模組需要清楚就需要知道datetime中的四大類

time:時間類
date:日期類
datetime:日期時間類
timedelta:時間變化類

1. time類

一般傳入三個引數,hour小時,minute分鐘,second秒,還有microsecond微秒,但一般不傳入。

datetime.time(hour, minute, second)

hour = datetime.time(hour=10, minute=20, second=40)
print(type(hour))
print(hour)

結果
<class 'datetime.time'>   # 說明我們例項化了一個datetime.time類
10:20:40

檢視這個類具有哪些方法和屬性

time = datetime.time(hour=10, minute=20, second=40)
print(time)
# 格式化時間物件  str型別
print(time.strftime('%H|%M|%S'))
# 小時 int型別
print(time.hour)
# 分鐘 int型別
print(time.minute)
# 秒   int型別
print(time.second)

結果
10:20:40
10|20|40
10
20
40

2. 日期類

傳入三個引數:年,月,日

datetime.date(year, month, day)

date = datetime.date(year=2020, month=12, day=20)
print(type(date))
print(date)

結果
<class 'datetime.date'>  # 例項化一個date物件
2020-12-20

日期類與時間類的方法類似,這裡就不再演示

3. timedate類

一般傳入6個引數,年,月,日,時,分,秒
datetime.datetime(year, month, day, hour, minute, second)

date_time = datetime.datetime(2000, 7, 4, 20, 30, 30)
print(type(date_time))
print(date_time)

結果
<class 'datetime.datetime'>  # 例項化一個datetime物件
2000-07-04 20:30:30
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

具有的屬性和方法

date_time = datetime.datetime(2000, 7, 4, 20, 30, 30)

print(date_time.replace(year=2010, day=3))  # 替換時間日期

date = date_time.date()   # 獲取日期物件,與上面的日期物件一樣
print(type(date))        

time = date_time.time()   # 獲取時間物件,與上面的時間物件一樣
print(type(time))

結果
2010-07-03 20:30:30
<class 'datetime.date'>
<class 'datetime.time'>

4. timedelta類

首先我們先搞清楚delta Δ是什麼意思,假設我們從一個地方出發,起始時間為t1,終點時間為t2,那麼我們花費的時間就為t2-t1,我們就可以表示為Δt,此時的delta就代表兩個時間段的差值,也就是時間變化量。datetime模組主要是用來計算時間的,所以也有這個概念。

注意:timedelta只能與date類,datetime類還有本身進行計算,且不能傳入年份,月份

一般傳入四個引數:日,時,分,秒用來計算

與本身進行計算

delta1 = datetime.timedelta(days=2, hours=8, minutes=30, seconds=20)
delta2 = datetime.timedelta(days=1, hours=4)
print(delta1-delta2)

結果
1 day, 4:30:20

與date類進行計算

delta1 = datetime.timedelta(days=2, hours=8, minutes=30, seconds=20)
date = datetime.date(year=2020, month=7, day=6)
print(type(date-delta1))
print(date-delta1)

結果
<class 'datetime.date'>   # date型別與delta相減結果仍是date型別
2020-07-04

與datetime類進行計算

delta1 = datetime.timedelta(days=2, hours=8, minutes=30, seconds=20)
date_time = datetime.datetime(year=2020, month=7, day=4)
print(type(date_time-delta1))
print(date_time-delta1)

結果
<class 'datetime.datetime'>  # 仍是datetime.datetime型別
2020-07-01 15:29:40

介紹完這幾個大類後我們來做一個練習,使用datetime模組來計算使用者輸入的的年份是平年還是閏年

思路:我們可以先建立一個date類或者datetime類,傳入使用者輸入的年份,month=3, days=1,第二步建立一個timedelta類,傳入引數 days=1,然後用建立的類減去timedelta類即可或者二月份的最後一天,如果是29則為閏年,為28則為平年。

year = int(input('請輸入年份:'))
t = datetime.datetime(year=year, month=3, day=1)
td = datetime.timedelta(days=1)
res = t - td
if res.day == 29:
    print('{}年是閏年'.format(year))
elif res.day == 28:
    print('{}年是平年'.format(year))

結語:時間就像海綿裡的水,只要願擠,總還是有的。——魯迅