天天看點

python基礎文法18-datetime子產品

一、簡介

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

繼續閱讀