最近在寫腳本時,遇到了一個關於日期參數的處理問題,大致要求如下
接口傳入2個日期,如:開始月份2022-03,結束月份2022-04
我需要獲取到如下2個參數:
開始日期前一個月的21號,即2022-02-21 (字符串類型)
結束日期后一個月的20號,即2022-05-20(字符串類型)
因為前端傳來的參數是字符串類型,例如"2022-03",我們不能直接對字符串進行加減操作,所以我第一想到的是先把字符串格式的日期轉換為日期對象,可以利用datetime
的strptime()
方法來達到這個目的
import datetime from dateutil.relativedelta import relativedelta date1 = datetime.datetime.strptime("2022-03", "%Y-%m") # 把字符串格式時間轉為datetime對象 print("打印date1的值:", date1) print("打印date1的類型:", type(date1)) 結果如下: 打印date1的值: 2022-03-01 00:00:00 打印date1的類型: <class 'datetime.datetime'>
strptime()
中第一個參數為日期字符串,第二個參數為格式化符號
例如我想把"年-月"
進行轉換,所以對應的格式化符號為"%Y-%m"
可以看到,"2022-03"
轉換為了2022-03-01 00:00:00
,默認是這個月的第一天0點
獲取到日期對象后,我想要獲取到上一個月的時間,例如我想得到 2022-02-01
這個可以通過 dateutil
庫的 relativedelta
方法實現
pre_date1 = date1 - relativedelta(months=1) # 獲取date1的上一個月 print("打印pre_date1的值:", pre_date1) 結果如下: 打印pre_date1的值: 2022-02-01 00:00:00
因為我要根據月份進行增減,所以使用months
參數,如果想根據年份增減,
可以使用years
,還有諸如weeks、days、hours
等
這樣就獲取到了上個月1號的日期對象 2022-02-01 00:00:00
接下來我要獲取 2022-02-21
可以通過datetime
的timedelta
方法對日期進行偏移,往后偏移20天即可,
然后使用strftime()
方法轉為字符串
pre_date1_day = (pre_date1 + datetime.timedelta(days=+20)).strftime("%Y-%m-%d") print("打印pre_date1_day的值:", pre_date1_day) 結果如下: 打印pre_date1_day的值: 2022-02-21
可以通過同樣的方法獲取到 2022-05-20
如果想獲取兩個日期的差,例如2022-06和2022-03的月份差
date1_month1 = datetime.datetime.strptime("2022-03", "%Y-%m").month # 獲取對應的月份數,例如2022-03,則獲取3
print("打印date1_month1的值:", date1_month1)
print("打印date1_month1的類型:", type(date1_month1))
date2_month2 = datetime.datetime.strptime("2022-06", "%Y-%m").month
print("打印date2_month2的值:", date2_month2)
x = date2_month2-date1_month1
print(x)
結果:
打印date1_month1的值: 3
打印date1_month1的類型: <class 'int'>
打印date2_month2的值: 6
3
如果想計算2022-06-01和2022-03-01之間的日期差
date1_day1 = datetime.datetime.strptime("2022-03-01", "%Y-%m-%d")
date2_day2 = datetime.datetime.strptime("2022-06-01", "%Y-%m-%d")
x = date1_day1-date2_day2
print(x.days)
結果
-92
其他python處理日期相關的文章