验证开始日期与结束日期

需要的模块

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)

这里使用递归应该也可以实现,代码排版可能不符合新要求,结果返回的是一个列表

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值