亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python時(shí)間處理模塊time和datetime詳解

 更新時(shí)間:2024年10月01日 15:34:36   作者:【1758872】的博客  
本文詳細(xì)介紹了Python中常用的時(shí)間處理模塊time和datetime,time模塊提供多種時(shí)間獲取和轉(zhuǎn)換功能,datetime模塊則在time的基礎(chǔ)上增加了日期和時(shí)間的組合處理,如datetime.now()獲取當(dāng)前日期時(shí)間,兩個(gè)模塊在日常編程中非常有用,尤其是在需要時(shí)間日期計(jì)算和轉(zhuǎn)換的場(chǎng)景下

一、time 模塊

time模塊是Python標(biāo)準(zhǔn)庫(kù)中最基礎(chǔ)、最常用的模塊之一。它提供了各種處理時(shí)間的方法和函數(shù),如獲取當(dāng)前時(shí)間、格式化時(shí)間、計(jì)算時(shí)間差等。time模塊大部分函數(shù)的底層實(shí)現(xiàn)是 C 語(yǔ)言庫(kù)的時(shí)間處理函數(shù)。

1.1、獲取時(shí)間相關(guān)函數(shù)

1.1.1、time.time()函數(shù)

時(shí)間戳是指格林威治時(shí)間1970年01月01日00時(shí)00分00秒(北京時(shí)間1970年01月01日08時(shí)00分00秒)起至現(xiàn)在的總秒數(shù),由于是基于Unix Timestamp,所以其所能表述的日期范圍被限定在 1970 ~ 2038 之間。

獲取當(dāng)前的時(shí)間戳(從Unix紀(jì)元開(kāi)始的秒數(shù)),返回一個(gè)浮點(diǎn)型數(shù)值。

import time
 
# 獲取當(dāng)前的時(shí)間戳(以秒為單位)
print(time.time())  # 1724168591.386799
# 獲取當(dāng)前的納秒級(jí)時(shí)間戳
print(time.time_ns())  # 1724168591386807429
# 將時(shí)間戳精確到毫秒然后四舍五入,說(shuō)明:1秒=1000毫秒=1000000微秒=1000000000納秒
print(round(time.time() * 1000))  # 1724168591387

1.1.2、time.ctime()函數(shù)

將時(shí)間戳轉(zhuǎn)換為可讀的字符串形式,如“Thu Aug 22 13:44:12 2024”。

import time
print(time.ctime())  # Thu Aug 22 13:44:12 2024

1.1.3、time.gmtime()函數(shù)

獲取當(dāng)前的時(shí)間,并將時(shí)間戳轉(zhuǎn)換為UTC時(shí)區(qū)的時(shí)間,此方法返回的是一個(gè)時(shí)間元組。

struct_time時(shí)間元組,為結(jié)構(gòu)化數(shù)據(jù),共有九個(gè)元素。

import time
print(time.gmtime())  # time.struct_time(tm_year=2024, tm_mon=8, tm_mday=22, tm_hour=5, tm_min=46, tm_sec=5, tm_wday=3, tm_yday=235, tm_isdst=0)

1.1.4、time.localtime([sec])函數(shù)

獲取當(dāng)前的時(shí)間,并將時(shí)間戳轉(zhuǎn)化成一個(gè)本地時(shí)區(qū)的struct_time,如果sec參數(shù)未輸入,則以當(dāng)前時(shí)間為轉(zhuǎn)化標(biāo)準(zhǔn)。

import time

# 將時(shí)間戳傳遞給localtime函數(shù)得到時(shí)間元組
c_time = time.localtime(time.time())
print(c_time)  # time.struct_time(tm_year=2024, tm_mon=8, tm_mday=21, tm_hour=11, tm_min=6, tm_sec=23, tm_wday=2, tm_yday=234, tm_isdst=0)
# 直接調(diào)用localtime()函數(shù)也是可以得到時(shí)間元組
l_time = time.localtime()
print(l_time)  # time.struct_time(tm_year=2024, tm_mon=8, tm_mday=21, tm_hour=11, tm_min=6, tm_sec=23, tm_wday=2, tm_yday=234, tm_isdst=0)

1.2、格式化時(shí)間相關(guān)函數(shù)

1.2.1、time.asctime()函數(shù)

最簡(jiǎn)單的獲取可讀的時(shí)間模式的函數(shù)是asctime()。

import time
 
c_time = time.localtime(time.time())
print(time.asctime(c_time))  # Wed Aug 21 11:19:14 2024
l_time = time.localtime()
print(time.asctime(l_time))  # Wed Aug 21 11:19:14 2024

1.2.2、time.strftime()函數(shù)

strftime(format, time):將時(shí)間元組(struct_time對(duì)象)格式化為字符串,可以指定格式。 

import time
 
formattime1 = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
print(formattime1)  # 輸出字符串格式的時(shí)間:2024-08-21 11:26:37
formattime2 = time.strftime("%a %b %d %H:%M:%S %Y", time.localtime())
print(formattime2)  # 輸出字符串格式的時(shí)間:Wed Aug 21 11:26:37 2024

1.2.3、time.strptime()函數(shù)

strptime(date_string, format):將字符串解析為時(shí)間元組,可以指定格式。

import time
 
t1 = time.strptime("2024-03-11 10:45:55", "%Y-%m-%d %H:%M:%S")
print(t1)  # time.struct_time(tm_year=2024, tm_mon=3, tm_mday=11, tm_hour=10, tm_min=45, tm_sec=55, tm_wday=0, tm_yday=71, tm_isdst=-1)

1.2.4、time.mktime() 函數(shù)

time.mktime() :函數(shù)的參數(shù)是一個(gè)struct_time對(duì)象或完整的9位元組,表示本地時(shí)間,將該時(shí)間元組解析為一個(gè)時(shí)間戳。

import time
 
timestamp1 = time.mktime(time.localtime())
print(timestamp1)  # 1724220894.0
timestamp2 = time.mktime(time.strptime("2023-03-11 09:35:11", "%Y-%m-%d %H:%M:%S"))
print(timestamp2)  # 1678498511.0

二、datetime模塊

datetime模塊是Python中處理日期和時(shí)間的高級(jí)模塊,datetime模塊是在time模塊的基礎(chǔ)上開(kāi)發(fā)的,是對(duì)time模塊的補(bǔ)充和擴(kuò)展,可以提供更精確和高效的時(shí)間處理功能,它提供了更加豐富和靈活的時(shí)間處理功能,支持更多的時(shí)間格式和時(shí)間操作,并且功能更加強(qiáng)大。datetime模塊提供了日期(date)、時(shí)間(time)、日期時(shí)間(datetime)等類型的操作。它也是基于C語(yǔ)言的時(shí)間庫(kù)實(shí)現(xiàn)的。

datetime模塊定義了下面這幾個(gè)類:

datetime.date:表示日期的類,有3個(gè)屬性(year、month、day),可進(jìn)行日期的加減運(yùn)算。 datetime.time:表示時(shí)間的類,有4個(gè)屬性(hour、minute、second、microsecond),可以進(jìn)行時(shí)間的加減運(yùn)算。 datetime.datetime:表示一個(gè)具體的日期時(shí)間,是date類和time類的結(jié)合體,具有date類和time類的所有屬性和方法。 datetime.timedelta:表示時(shí)間間隔,即兩個(gè)時(shí)間點(diǎn)之間的長(zhǎng)度。 datetime.tzinfo:與時(shí)區(qū)有關(guān)的相關(guān)信息。 datetime.datetime_CAPI:日期時(shí)間對(duì)象C語(yǔ)言接口。

2.1、datetime.date類介紹

由于Python也是面向?qū)ο缶幊陶Z(yǔ)言,所以針對(duì)類,就會(huì)有構(gòu)造函數(shù),該類的構(gòu)造函數(shù)如下: 

class datetime.date(year, month, day): 

year: 表示年,范圍[MINYEAR, MAXYEAR],即[1, 9999] month: 表示月,范圍[1, 12] day:一月中第幾天,最大值根據(jù)給定的year,month參數(shù)來(lái)決定。例如閏年2月份有29天

2.1.1、date對(duì)象所能表示的最大最小日期

# 返回的是datetime.date類型的對(duì)象

# 返回的是datetime.date類型的對(duì)象
import datetime
print(datetime.date.max)  # 9999-12-31
print(datetime.date.min)  # 0001-01-01

2.1.2、date.today() 函數(shù)

# 返回一個(gè)當(dāng)前本地日期的date類型的對(duì)象

# 返回一個(gè)當(dāng)前本地日期的date類型的對(duì)象
import datetime
print(datetime.date.today())  # 2024-08-21

2.1.3、date.fromtimestamp()函數(shù)

# 根據(jù)給定的時(shí)間戳,返回一個(gè)date對(duì)象

# 根據(jù)給定的時(shí)間戳,返回一個(gè)date對(duì)象
import time
import datetime
 
now = time.time()
s = datetime.date.fromtimestamp(now)  # 2024-08-21

2.1.4、date.weekday()函數(shù)

# 參數(shù)必須是一個(gè)date類型的對(duì)象,返回該日期是一周中的第幾天。返回值是一個(gè)整型。星期一,返回0;星期二,返回1...

# 參數(shù)必須是一個(gè)date類型的對(duì)象,返回該日期是一周中的第幾天。返回值是一個(gè)整型。星期一,返回0;星期二,返回1...
import datetime
s = datetime.date.today()  # 輸出:2024-08-21
d = datetime.date.weekday(s)  # 輸出:2

2.1.5、date.isoweekday()函數(shù)

# 該函數(shù)需要一個(gè)datetime.date類型的參數(shù)。返回weekday中的星期幾,星期一,返回1;星期二,返回2;以此類推。

# 該函數(shù)需要一個(gè)datetime.date類型的參數(shù)。返回weekday中的星期幾,星期一,返回1;星期二,返回2;以此類推。
import datetime
s = datetime.date.today()  # 輸出:2024-08-21
d = datetime.date.isoweekday(s)  # 輸出:3

2.1.6、date.isocalendar()函數(shù)

例如,2004 年的第一天是星期四,因此 ISO 2004 年的第一個(gè)星期開(kāi)始于 2003 年 12 月 29 日星期一,結(jié)束于 2004 年 1 月 4 日星期日

# 該函數(shù)需要一個(gè)datetime.date類型的參數(shù)。返回date類型對(duì)象中的year(年),week(周),weekday(一周中的第幾天),返回值是一個(gè)元組
import datetime
s = datetime.date(2003, 12, 29)  # 2003-12-29
d = datetime.date.isocalendar(s)  # datetime.IsoCalendarDate(year=2004, week=1, weekday=1), 代表2004年中的第1周,第1周中的第1天

2.1.7、date.strftime(fmt)函數(shù)

# 返回自定義格式的時(shí)間字符串。fmt是自定義的時(shí)間格式
import datetime
s = datetime.date.today()  # 2024-08-21
d = s.strftime("%Y-%m-%d %H:%M:%S")  # 2024-08-21 00:00:00

2.1.8、date.replace(year, month, day)

# 生成一個(gè)新的日期對(duì)象  用參數(shù)指定的年,月,日代替原有對(duì)象中的屬性。(原有對(duì)象仍保持不變)
import datetime
s = datetime.date.today()  # 2024-08-21
d = s.replace(year=2017)  # 2017-08-21

2.2、datetime.time類介紹

待續(xù)~

2.3、datetime.datetime類介紹

2.3.1、datetime.now()函數(shù)

# 返回一個(gè)表示當(dāng)前本地時(shí)間的datetime對(duì)象,如果提供了參數(shù)tz,則獲取tz參數(shù)所指時(shí)區(qū)的本地時(shí)間。
from datetime import datetime
 
# 獲取當(dāng)前日期時(shí)間
print(datetime.now())  # 2024-08-21 15:41:42.388216
# 獲取當(dāng)前時(shí)間
print(datetime.now().time())  # 15:41:42.388216
# 獲取當(dāng)前日期
print(datetime.now().date())  # 2024-08-21
# 獲取當(dāng)前時(shí)間元組
print(datetime.now().timetuple())  # time.struct_time(tm_year=2024, tm_mon=8, tm_mday=21, tm_hour=15, tm_min=41, tm_sec=42, tm_wday=2, tm_yday=234, tm_isdst=-1)

2.3.2、datetime.strftime()函數(shù)

datetime.strftime(datetime, format):將datetime對(duì)象格式化為字符串,可以指定格式。

# 返回自定義格式的時(shí)間字符串。fmt是自定義的時(shí)間格式
from datetime import datetime
 
now = datetime.now()
print(now)  # 2024-08-21 22:49:27.570491
print(now.strftime("%Y-%m-%d %H:%M:%S"))  # 2024-08-21 22:49:27
print(now.strftime("%Y-%m-%d"))  # 2024-08-21
print(now.strftime("%H:%M:%S"))  # 22:49:27
 
# 如果我們想將01/09中的0給去掉該如何實(shí)現(xiàn)呢?不同的操作系統(tǒng)實(shí)現(xiàn)方式不一樣
print(now.strftime('%Y/%-m/%-d'))  # Linux平臺(tái): 2024/8/21
print(now.strftime('%Y/%#m/%#d'))  # Windows平臺(tái): 2024/8/21

2.3.3、datetime.strptime()函數(shù)

datetime.strptime(date_string, format):將字符串解析成datetime對(duì)象,可以指定格式。

from datetime import datetime
 
d = datetime.strptime("2018-10-08 09:00:00", "%Y-%m-%d %H:%M:%S")  # 2018-10-08 09:00:00
print(type(d))  # <class 'datetime.datetime'>

2.3.4、datetime.timestamp()函數(shù)

from datetime import datetime
 
# 創(chuàng)建一個(gè)datetime對(duì)象,假設(shè)為2023年3月1日中午12點(diǎn)
dt = datetime(2023, 3, 1, 12, 0)
# 將datetime對(duì)象轉(zhuǎn)換為時(shí)間戳
timestamp = dt.timestamp()  # 1677643200.0
# 獲取當(dāng)前時(shí)間的時(shí)間戳
print(datetime.now().timestamp())  # 1724343305.378539

2.3.5、datetime.fromtimestamp()函數(shù)

datetime.fromtimestamp(timestamp, tz=None):用于將Unix時(shí)間戳轉(zhuǎn)換為datetime對(duì)象,其中timestamp是Unix時(shí)間戳,tz是時(shí)區(qū)信息(可選)

# 返回時(shí)間戳對(duì)應(yīng)的本地日期時(shí)間
from datetime import datetime
print(datetime.fromtimestamp(1724230448.0))  # 2024-08-21 16:54:08

2.3.6、datetime.replace()函數(shù)

替換日期時(shí)間的某個(gè)部分,返回新的datetime對(duì)象。

# 替換部分日期時(shí)間
dt = datetime.datetime(2022, 10, 1, 12, 30, 45)
new_dt = dt.replace(year=2023)
print(new_dt)

2.4、datetime.timedelta類介紹

timedelta對(duì)象代表兩個(gè)時(shí)間之間的時(shí)間差,我們進(jìn)行時(shí)間上的增減的時(shí)候就可以用timedelta實(shí)現(xiàn),timedelta類可以很容易地算出前幾天或后幾天的時(shí)刻,還可以查看第幾周對(duì)應(yīng)的時(shí)間,例如:timedelta(weeks=20) 20周將被自動(dòng)轉(zhuǎn)化為天數(shù),前幾天時(shí)刻,用減法,后幾天時(shí)刻,則用當(dāng)前時(shí)間加上timedelta(days=d, hours=h)。

2.4.1、兩個(gè)date對(duì)象做差(相差多少天)

from datetime import date
 
d1 = date(2018, 10, 18)  # 構(gòu)建日期對(duì)象
d2 = date(2017, 12, 31)  # 構(gòu)建日期對(duì)象
d3 = date.today()  # 獲取當(dāng)天的日期
print((d1 - d2).days)  # 291
print(d3 - d2)  # 2425 days, 0:00:00
print(d3.__sub__(d2))  # 2425 days, 0:00:00

2.4.2、兩個(gè)datetime對(duì)象做差(相差多少秒)

from datetime import datetime
 
time1 = datetime(2019, 1, 13, 12, 0, 0)  # 構(gòu)建日期時(shí)間對(duì)象
time2 = datetime.now()  # 獲取當(dāng)前日期時(shí)間對(duì)象
# 計(jì)算兩個(gè)日期時(shí)間對(duì)象的時(shí)間差(以秒計(jì)算)
differtime = (time2 - time1).total_seconds()  # 176881267.568535

2.4.3、計(jì)算未來(lái)和過(guò)去的時(shí)間

timedelta取值(days=0,seconds=0,microseconds=0,milliseconds=0,minutes=0,hours=0,weeks=0)

使用 days=1代表后一天,days=-1代表前一天,其他參數(shù)也一樣。

from datetime import datetime, timedelta
 
now = datetime.now()
print(now + timedelta(weeks=10))  # 十周之后
print(now + timedelta(days=10))  # 十天之后
print(now + timedelta(hours=10))  # 十小時(shí)之后
print(now + timedelta(minutes=10))  # 十分鐘之后
print(now + timedelta(seconds=10))  # 十秒之后
 
print(now + timedelta(weeks=-10))  # 十周之前
print(now + timedelta(days=-10))  # 十天之前
print(now + timedelta(hours=-10))  # 十小時(shí)之前
print(now + timedelta(minutes=-10))  # 十分鐘之前
print(now + timedelta(seconds=-10))  # 十秒之前

三、Calendar模塊

calendar模塊提供了一些與日歷相關(guān)的函數(shù)和類。它包含可打印的日歷類,可以格式化周和月的天數(shù),并將日歷信息轉(zhuǎn)換為不同的格式?;旧?,calendar模塊提供了一種將日期轉(zhuǎn)換為特定格式的工具。它是純Python的實(shí)現(xiàn)。

四、dateutil模塊

dateutil模塊是由Gustavo Niemeyer在2003年編寫(xiě)而成的對(duì)日期時(shí)間操作的第三方模塊,對(duì)Python內(nèi)置的datetime模塊進(jìn)行擴(kuò)展時(shí)區(qū)和解析。

dateutil庫(kù)主要有兩個(gè)模塊:parser和rrule,其中parser可以將字符串解析成datetime,而rrule則是根據(jù)定義的規(guī)則來(lái)生成datetime

dateutil模塊特點(diǎn):

能夠計(jì)算日期時(shí)間相對(duì)增量,例如下周、下個(gè)月、明年、每月的最后一周等 可以計(jì)算兩個(gè)給定日期和/或日期時(shí)間對(duì)象之間的相對(duì)增量 支持多種時(shí)區(qū)格式文件的解析,例如UTC時(shí)區(qū)、TZ時(shí)區(qū)等 支持包括RFC字符串或其他任何字符串格式的通用日期時(shí)間解析

官方文檔:https://labix.org/python-dateutil

安裝:pip install python-dateutil

4.1、dateutil庫(kù)常用模塊

dateutil庫(kù)常用模塊有三個(gè):parser、rrule和relativedelta

dateutil.parser:將字符串解析成datetime dateutil.rrule:將參數(shù)輸出datetime.datetime格式的時(shí)間 dateutil.relativedelta:日期時(shí)間偏移量

4.1.1、dateutil.parser

from dateutil import parser
 
# 沒(méi)指定時(shí)間默認(rèn)0點(diǎn),沒(méi)指定日期默認(rèn)當(dāng)天,沒(méi)指定年份默認(rèn)當(dāng)年, 當(dāng)年份放在前面時(shí),只能按年月日的順序
print(parser.parse('2024-08-08'))          # 2024-08-08 00:00:00
print(parser.parse('2024-07-08 10:45:52')) # 2024-12-24 10:55:55
print(parser.parse('20241224105555'))      # 2024-12-24 10:45:52
print(parser.parse('2024.10.10'))          # 2024-10-10 00:00:00
print(parser.parse('2007/09/15'))          # 2007-09-15 00:00:00
 
# fuzzy:開(kāi)啟模糊匹配,過(guò)濾無(wú)法識(shí)別的時(shí)間日期字符
print(parser.parse('Today is 11-29 10:45, I feel good.', fuzzy=True))   # 2024-11-29 10:45:00
 
# 當(dāng)只有月日時(shí),parser會(huì)將分隔符前面的數(shù)字解析為月份,后面的為日, 當(dāng)有年份時(shí),在前面的月份超出范圍時(shí),會(huì)自動(dòng)判斷哪個(gè)是月哪個(gè)是日
# 11.29解析結(jié)果異常,11-29、11/29可正常解析
print(parser.parse('11-29'))               # 2024-11-29 00:00:00
print(parser.parse('11/29/2023'))          # 2023-11-29 00:00:00
 
# 當(dāng)前面的月份超過(guò)12時(shí),parser會(huì)自動(dòng)識(shí)別月和日
print(parser.parse('13/11/2023'))          # 2023-11-29 00:00:00
 
# 當(dāng)分隔符為逗號(hào)時(shí),只有月日時(shí),要把月放在后面
# 當(dāng)分隔符為逗號(hào)時(shí),有年份時(shí),年份要放在后面,要把月放在前面
print(parser.parse('29,11'))               # 2024-08-29 00:00:00
print(parser.parse('11,29,2024'))          # 2024-11-29 00:00:00
 
# 識(shí)別英文的月、日
print(parser.parse('November 29'))         # 2024-11-29 00:00:00
print(parser.parse('November 1st'))        # 2024-11-01 00:00:00
print(parser.parse('November 29 2023'))    # 2023-11-29 00:00:00
print(parser.parse('2023 November29'))     # 2023-11-29 00:00:00
print(parser.parse('11:45 AM'))            # 2024-11-29 11:45:00

4.1.2、dateutil.rrule()

rrule.rrule(freq, dtstart, interval, wkst, count, until, by)

freq:?jiǎn)挝?,可選的值為YEARLY、MONTHLY、WEEKLY、DAILY、HOURLY、MINUTELY、SECONDLY,即年月日周時(shí)分秒 dtstart、until:開(kāi)始和結(jié)束時(shí)間,時(shí)間格式datetime.datatime類型 interval:間隔 wkst:周開(kāi)始時(shí)間 count:生產(chǎn)時(shí)間的個(gè)數(shù) by:指定匹配的周期,例如,byweekday=(MO,TU):只有周一周二的匹配,取值如下:
          - bysetpos:必須為整數(shù)或者整數(shù)序列,設(shè)置匹配的周期頻率
          - bymonth:設(shè)置匹配的月份
          - bymonthday:設(shè)置匹配每月的日期
          - byyearday:設(shè)置匹配每年的天數(shù)
          - byweekno:設(shè)置匹配第幾周
          - byweekday:MO,TU,WE,TH,FR,SA,SU
          - byhour:設(shè)置匹配小時(shí)
          - byminute:設(shè)置匹配分鐘
          - bysecond:設(shè)置匹配秒數(shù)

from dateutil import parser, rrule
 
# 生成一個(gè)連續(xù)的日期列表
print(list(rrule.rrule(rrule.DAILY, dtstart=parser.parse('2024-01-01'), until=parser.parse('2024-01-03'))))
# 輸出:[datetime.datetime(2024, 1, 1, 0, 0), datetime.datetime(2024, 1, 2, 0, 0), datetime.datetime(2024, 1, 3, 0, 0)]
 
# 生成一個(gè)間隔一天的連續(xù)的日期列表
print(list(rrule.rrule(rrule.DAILY, interval=2, dtstart=parser.parse('2024-01-01'), until=parser.parse('2024-01-05'))))
# 輸出:[datetime.datetime(2024, 1, 1, 0, 0), datetime.datetime(2024, 1, 3, 0, 0), datetime.datetime(2024, 1, 5, 0, 0)]
 
# 只保留前3個(gè)元素
print(list(rrule.rrule(rrule.DAILY, count=3, dtstart=parser.parse('2024-01-01'), until=parser.parse('2024-01-10'))))
# 輸出:[datetime.datetime(2024, 1, 1, 0, 0), datetime.datetime(2024, 1, 2, 0, 0), datetime.datetime(2024, 1, 3, 0, 0)]
 
# 只取周六和周日日期時(shí)間
print(list(rrule.rrule(rrule.DAILY, byweekday=(rrule.SA, rrule.SU), dtstart=parser.parse('2024-01-01'), until=parser.parse('2024-01-10'))))
# 輸出:[datetime.datetime(2024, 1, 6, 0, 0), datetime.datetime(2024, 1, 7, 0, 0)]
 
# 以月為間隔,生成3個(gè)月
print(list(rrule.rrule(rrule.MONTHLY, count=3, dtstart=parser.parse('2024-01-01'))))
# 輸出:[datetime.datetime(2024, 1, 1, 0, 0), datetime.datetime(2024, 2, 1, 0, 0), datetime.datetime(2024, 3, 1, 0, 0)]
 
# rrule可計(jì)算出兩個(gè)datetime對(duì)象間相差的年月日等時(shí)間數(shù)量
print(rrule.rrule(rrule.DAILY, dtstart=parser.parse('20240101'), until=parser.parse('20240201')).count())    # 32
# 不足N個(gè)月的,按N個(gè)月計(jì)算;不滿整月的,按N-1個(gè)月計(jì)算
print(rrule.rrule(rrule.MONTHLY, dtstart=parser.parse('20240101'), until=parser.parse('20240201')).count())  # 2

4.1.3、dateutil.relativedelta()

from dateutil import parser, rrule, relativedelta
 
# datetime.timedelta與relativedelta.relativedelta()
from datetime import datetime, timedelta
 
# timedelta僅支持:weeks、days、hours、minutes、seconds,不支持月、年
# datetime.timedelta()計(jì)算上周
print(datetime.strftime(datetime.now() - timedelta(weeks=1), '%Y-%m-%d'))   # 2024-08-20
# relativedelta.relativedelta()計(jì)算上周
print(datetime.strftime(datetime.now() - relativedelta.relativedelta(weeks=1), "%Y-%m-%d"))   # 2024-08-20
 
# 計(jì)算上月初、計(jì)算上N月初
print(datetime.strftime(datetime.now() - relativedelta.relativedelta(months=1), "%Y-%m-01"))   # 2024-07-01
# 計(jì)算上月末、計(jì)算上N月末
print(datetime.strftime(datetime.strptime(datetime.now().strftime('%Y-%m-01'), '%Y-%m-%d') - relativedelta.relativedelta(days=1), '%Y-%m-%d'))   # 2024-07-31

附件

附件1:中英文單詞對(duì)照表

中英文單詞對(duì)照表

中文英文(簡(jiǎn)稱)中文英文(簡(jiǎn)稱)中文英文
一月January(Jan)星期一‌Monday(Mon)毫秒milliseconds
二月February(Feb)星期二‌Tuesday(Tue)微秒microseconds
三月March(Mar)星期三‌Wednesday‌(Wed)時(shí)間元組的九個(gè)屬性
四月April(Apr)星期四‌Thursday(Thu)tm_year(年)0000~9999
五月May(May)星期五‌Friday(Fri)tm_mon(月)1~12
六月June(Jun)星期六Saturday(Sat)tm_mday(日)1~31
七月July(Jul)星期天‌Sunday(Sun)tm_hour(時(shí))0~23
八月August(Aug)weekstm_min(分)0~59
九月September(Sep)daystm_sec(秒)0~61(61是閏秒)
十月October(Oct)時(shí)hourstm_wday(一周中的第幾日)0~6(0是周一)
十一月November(Nov)minutestm_yday(一年中的第幾天)1~366
十二月December(Dec)secondstm_isdst(是否是夏令時(shí))1為是,0為不是 ,-1為未知,默認(rèn)為-1

附件2:格式化時(shí)間參考表

格式化時(shí)間參考表

%aMon星期幾的簡(jiǎn)寫(xiě)%pPM本地的AM或PM的等價(jià)顯示
%AMonday星期幾的全稱%r5:21:43 PM12小時(shí)的時(shí)間
%bSep月份的簡(jiǎn)寫(xiě)%R17:21顯示小時(shí)和分鐘:hh:mm
%BSeptember月份的全稱%S43十進(jìn)制的秒數(shù) (01 - 61)不是59,閏年秒占兩秒
%cMon Sep 21 17:21:42 2020標(biāo)準(zhǔn)的日期的時(shí)間串%T17:21:43顯示時(shí)分秒:hh:mm:ss
%C20年份的后兩位數(shù)字%u1每周的第幾天,星期一為第一天 (值從0到6,星期一為0)
%d21十進(jìn)制表示的每月的第幾天%U38每年的第幾周,把星期日做為第一天(值從0到53)
%D09/21/20月/天/年%V39每年的第幾周,使用基于周的年
%e21在兩字符域中,十進(jìn)制表示的每月的第幾天%w1十進(jìn)制表示的星期幾(值從0到6,星期天為0)
%F2020-09-21年-月-日%W38每年的第幾周,把星期一做為第一天(值從0到53)
%g20年份的后兩位數(shù)字%x09/21/20標(biāo)準(zhǔn)的日期串
%G2020使用基于周的年%X17:21:43標(biāo)準(zhǔn)的時(shí)間串
%hSep簡(jiǎn)寫(xiě)的月份名%y20不帶世紀(jì)的十進(jìn)制年份(值從0到99)
%H1724小時(shí)制的小時(shí)%Y2020帶世紀(jì)部分的十制年份
%I5第幾個(gè)小時(shí)(12小時(shí)制,01 - 12)%z+0800時(shí)區(qū)
%j265十進(jìn)制表示的每年的第幾天%Z中國(guó)標(biāo)準(zhǔn)時(shí)間時(shí)區(qū)名稱,如果不能得到時(shí)區(qū)名稱則返回空字符
%m9十進(jìn)制表示的月份%%%百分號(hào)
%M21十進(jìn)制表示的分鐘數(shù)

 到此這篇關(guān)于Python時(shí)間處理模塊time和datetime詳解的文章就介紹到這了,更多相關(guān)模塊time和datetime詳解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論