def dateMinus10Day(cls, dayno_str):
daysofmonth = { # 每个月的天数字典
1: 31,
2: 28,
3: 31,
4: 30,
5: 31,
6: 30,
7: 31,
8: 31,
9: 30,
10: 31,
11: 30,
12: 31
}
y = int(dayno_str[0:4]) # 从字符串 '2021-11-03' 取出年月日
m = int(dayno_str[5:7])
d = int(dayno_str[8:10])
leapyear = 0 # 闰年标志
date_int_10 = 0 # 日期减10天得到的结果
# 判断是否是闰年
if ((y % 4 == 0 and y % 100 != 0) or (y % 400 == 0)):
leapyear = 1
# 将字符串 '2021-11-03' 转为数字 20211103
date_int = int(dayno_str[0:4]) * 10000 + int(dayno_str[5:7]) * 100 + int(dayno_str[8:10])
# 开始日期相关的逻辑
if int(dayno_str[8:10]) >= 10:
date_int_10 = date_int - 10
else:
if m == 1: # 如果是1月,年要减1
date_int_10 = (y - 1) * 10000 + 12 * 100 + d + 31 - 10
elif m == 3: # 如果是3月,考虑2月是28天还是29天
if leapyear:
date_int_10 = y * 10000 + 2 * 100 + d + 29 - 10
else:
date_int_10 = y * 10000 + 2 * 100 + d + 28 - 10
else:
date_int_10 = y * 10000 + (m - 1) * 100 + d + daysofmonth[m - 1] - 10
return date_int_10
如上代码,记录了一个函数,实现输入 '2021-11-03' 这样的字符串,减去10天后,得到的日期:20211024。其中有些日期计算的逻辑,以后再写日期计算时可以参考。