需要的模块
import datetime
import re
1.判断是否为闰年
def is_leap_year(year):
if year % 4 == 0 and year % 100 != 0:
return True
elif year % 400 == 0:
return True
else:
return False
2.判断日期是否合法
def is_valid_date(date_string: str) -> bool:
parts = date_string.split('-')
if len(parts) != 3:
return False
year, month, day = parts
if not year.isdigit() or not month.isdigit() or not day.isdigit():
return False
year, month, day = int(year), int(month), int(day)
if year < 1900 or year > 3099 or month < 1 or month > 12:
return False
if month == 2:
if is_leap_year(year):
if day < 1 or day > 29:
return False
else:
if day < 1 or day > 28:
return False
elif month in [4, 6, 9, 11]:
if day < 1 or day > 30:
return False
else:
if day < 1 or day > 31:
return False
return True
3.判断日期格式(例如:2023-09-08)
1900年-2100年
def check_date_format(date_string: str) -> bool:
regex = '^(19|20|21)\d{2}[-](0[1-9]|1[012])[-](0[1-9]|[12]\d|3[01])$'
if re.match(regex, date_string):
return True
else:
return False
3.校验函数
def date_input() -> list:
while True:
start_date = input("请输入查询开始时间(xxxx-xx-xx):")
print(start_date)
if check_date_format(start_date) and is_valid_date(start_date):
break
else:
print("输入错误,请重新输入")
while True:
end_date = input("请输入查询结束时间(xxxx-xx-xx):")
print(end_date)
if check_date_format(end_date) and is_valid_date(end_date):
strftime_start = datetime.datetime.strptime(start_date, "%Y-%m-%d")
strftime_end = datetime.datetime.strptime(end_date, "%Y-%m-%d")
if strftime_start <= strftime_end:
break
else:
print("输入错误,请重新输入")
else:
print("输入错误,请重新输入")
return [start_date, end_date]
调用
if __name__ == "__main__":
date = date_input()
print(date)
这里使用递归应该也可以实现,代码排版可能不符合新要求,结果返回的是一个列表