一、簡介
Python中常用于時間的子產品有time、datetime 和 calendar,顧名思義 time 是表示時間(時、分、秒、毫秒)等,calendar是表示月曆時間的,之前介紹了time子產品,今天說說 datetime子產品。
datetime子產品的五大類:
datetime.date 表示日期的類,主要用于處理年、月、日;
datetime.time 表示時間的類,主要用于處理時、分、秒;
datetime.datetime 表示日期時間的類,date類和time類的綜合使用,可以處理年、月、日、時、分、秒;
datetime.timedelta 表示時間間隔,即兩個時間點的間隔,主要用于做時間加減的
datetime.tzinfo 時區的相關資訊。
datetime_CAPI 時間日期對象C語言接口
datetime.sys 各種系統資訊
datetime.timezone 表示時區的類
datetime子產品的常量:
常量 功能說明 用法 傳回值
MAXYEAR 傳回能表示的最大年份 datetime.MAXYEAR 9999
MINYEAR 傳回能表示的最小年份 datetime.MINYEAR 1
二、datetime子產品中部分類介紹
1.date類
date類包含三個參數,分别為year,month,day,傳回格式為year-month-day。
其包含的構造方法如下:
__new__(year,month,day) 預設的構造函數,建立date類的對象時直接傳入year,month,day三個參數即可傳回對應的日期
fromtimestamp(t) 使用時間戳構造對象,使用方法為:datetime.date.fromtimestamp(t),傳入參數t為一個時間戳,傳回時間戳對應的日期
today() 使用今天的日期構造對象,使用方法為:datetime.date.tody(),無參數,傳回今天的日期
fromordinal(n) 使用日期序數構造對象,使用方法為:datetime.date.fromordinal(n),傳入參數為一個整數序數,代表從公元1年1月1日開始的序數,序數每增加1代表增加1天,傳回最終計算出的日期
類方法:
timetuple() 傳回日期對應的time.struct_time對象
tordinal() 相當與fromordinal(n)的逆過程,傳回值即為fromordinal(n)中的日期序數n
weekday(),isoweekday() 傳回該日期對應星期幾,用[0,6]代表星期-到星期日。
isocalendar() 傳回一個三元組,格式為(year,week,number,weekday),分别代表年,第幾周,星期幾
isoformat() 傳回标準日期格式:YYYY-MM-DD
ctime() 傳回格式為:Fri Dec 23 00:00:00 2022
strftime(format) 把日期按照format指定的格式進行格式化
replace(year,month,day) 傳入參數為year,month,day,傳回對應的新日期
示例:
import datetime as dt
d1 = dt.date(2022,12,23)
print(d1)
d2 = dt.date.today()
print(d2)
d3 = dt.date.fromordinal(500)
print(d3)
d4 = dt.date.fromordinal(5000)
t = d4.timetuple()
print(t)
n = d4.toordinal()
print(n)
day1 = d1.weekday()
print(day1)
day2 = d2.isocalendar()
print(day2)
day3 = d2.isoformat()
print(day3)
d = dt.date.today()
day = d.ctime()
print(day)
結果如下:
2022-12-23
2022-12-23
0002-05-15
time.struct_time(tm_year=14, tm_mon=9, tm_mday=9, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=252, tm_isdst=-1)
5000
4
(2022, 51, 5)
2022-12-23
Fri Dec 23 00:00:00 2022
2、time類
(1)靜态方法和屬性:可以直接通過類名調用;
time.min:time類所能表示的最小時間。
time.max:time類所能表示的最大時間。
time.resolution:time類表示時間的最小機關,這裡是1微秒;
示例:
from datetime import *
print(time.max)
print(time.min)
print(time.resolution)
結果如下:
23:59:59.999999
00:00:00
0:00:00.000001
(2)其它常用方法和屬性:通過time對象才能調用
#先構造一個time對象
t=time(10,58,59)
"屬性" t.hour、t.minute、t.second、t.microsecond:時、分、秒、微秒;
"方法"
t.replace(hour=,minute=,second=,microsecond=):生成一個新的時間對象,用參數指定的時、分、秒、微秒代替原有對象中的屬性。(原有對象仍保持不變)
t.isoformat():傳回型如"HH:MM:SS"格式的字元串時間表示;
t.strftime(format):傳入任意格式符,可以輸出任意格式的時間表示形式;
3.datetime類
示例:
from datetime import datetime
from datetime import timedelta
#擷取目前的日期,年月份
c=datetime.now().date()
print(c)
#擷取每個時間的序列
d=datetime.now().timetuple()
print(d)
#擷取月份(tm_year, tm_mon, tm_mday, tm_hour, tm_min, tm_sec, tm_wday, tm_yday, tm_isdst)
e=datetime.now().timetuple().tm_mon
print(e)
# 在我們現在的日期裡面加入2天,最後列印出來,這裡要注意,子產品的使用,有優先級的混淆
f=datetime.now().date()+timedelta(days=2)
print(f)
# 在現在的時間裡面向後推遲2個小時
g=datetime.now()+timedelta(hours=2)
print(g)
結果如下:
2022-12-23
time.struct_time(tm_year=2022, tm_mon=12, tm_mday=23, tm_hour=16, tm_min=45, tm_sec=27, tm_wday=4, tm_yday=357, tm_isdst=-1)
12
2022-12-25
2022-12-23 18:45:27.084031
三、datetime子產品簡單使用
1.擷取目前時間
from datetime import datetime as dt
now = dt.now()
print(now)
print(type(now))
print(now.year)
print(now.month)
print(now.day)
print(now.hour)
print(now.minute)
print(now.second)
print(now.microsecond)
結果如下:
2022-12-23 16:03:45.624622
<class 'datetime.datetime'>
2022
12
23
16
3
45
624622
2.時間間隔
兩個datetime對象相減,得到的是一個timedelta對象,timedelta(天數,秒數,微秒,毫秒,分鐘,小時)
from datetime import timedelta as tdt
det1 = dt(2022,6,30,20) - dt(2022,2,2,1)
print(det1)
print(dt(2022,6,10)+det1)
print(tdt(13,23,45,12,11,14))
結果如下:
148 days, 19:00:00
2022-11-05 19:00:00
13 days, 14:11:23.012045
3.datetime轉字元串 strftime()
stamp = dt(2022,12,23)
print(str(stamp))
print(stamp.strftime("%Y/%m/%d %H:%M:%S"))
print(stamp.strftime("%Y-%m-%d %H:%M:%S"))
print(stamp.strftime("%Y/%m/%d"))
print(stamp.strftime("%Y-%m-%d"))
結果如下:
2022-12-23 00:00:00
2022/12/23 00:00:00
2022-12-23 00:00:00
2022/12/23
2022-12-23
4.字元串轉datetime對象 datetime.strptime()
dates = ['11/12/2022','12/12/2022']
datelist = [dt.strptime(i,"%m/%d/%Y") for i in dates]
print(datelist)
結果如下:
[datetime.datetime(2022, 11, 12, 0, 0), datetime.datetime(2022, 12, 12, 0, 0)]
5.parse()解析字元串日期
将字元串形式的日期解析成datetime對象,字元串寫法可以有很多,比如:
from dateutil.parser import parse
print(parse('11/12/2022'))
print(parse('2022-11-12'))
print(parse('2022.11.12'))
print(parse('2022 11 12'))
print(parse('2022, 11, 12'))
結果如下:
2022-11-12 00:00:00
2022-11-12 00:00:00
2022-11-12 00:00:00
2022-11-12 00:00:00
2022-11-12 00:00:00