python處理日期參數:把字符串轉為datetime對象、月份增減等


最近在寫腳本時,遇到了一個關於日期參數的處理問題,大致要求如下

接口傳入2個日期,如:開始月份2022-03,結束月份2022-04

我需要獲取到如下2個參數:

開始日期前一個月的21號,即2022-02-21 (字符串類型)

結束日期后一個月的20號,即2022-05-20(字符串類型)

因為前端傳來的參數是字符串類型,例如"2022-03",我們不能直接對字符串進行加減操作,所以我第一想到的是先把字符串格式的日期轉換為日期對象,可以利用datetimestrptime()方法來達到這個目的

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

可以通過datetimetimedelta方法對日期進行偏移,往后偏移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處理日期相關的文章

如何在python中構造時間戳參數 

一個日期類型接口參數的構造思路 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM