python处理日期参数:把字符串转为datetime对象、月份增减等
最近在写脚本时,遇到了一个关于日期参数的处理问题,大致要求如下
接口传入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处理日期相关的文章