直接上代码
import datetime
# 输入一个字符串日期
input_data = '20230331'
# 字符串格式化为datetime类型
format_data = datetime.datetime.strptime(input_data,"%Y%m%d")
# 获取当前日期距离本月第一天过去了多少天
days = format_data.day
# 获取当前月份 -1 ,表示上月,如果上月为0,则默认值为12月
months = format_data.month - 1 if format_data.month - 1 != 0 else 12
# 获取当天日期的月份
try:
# 这里面还有问题,如果上月是28号,则1月必须是31号
if (days == 28 or days == 29 ) and months == 2:
add_months = format_data.replace(month=months,day=31) # 得出上月同天如果是月末,走Exception
elif days == 30 and format_data == format_data.replace(month=months + 2, day=1) - datetime.timedelta(days=1):
# 当前日期=当月最后一天,则去上月末
add_months = format_data.replace(month=months, day=31)
else:
add_months = format_data.replace(month=months, day=31)
#
except ValueError as e:
# 例如月末是31号,上月没有31号,程序就会报错,这个时候,就利用下面找上月末最后一天
# 原理,本月第一天-1,就是上月月末
add_months = format_data.replace(day=1) - datetime.timedelta(days=1)
print("当前日期:==>",format_data.strftime("%Y%m%d"),"上月同天:==>",add_months.strftime("%Y%m%d"))