You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python处理DD-YY-MM格式字符串日期时如何正确设置校验条件

Python日期字符串拆分与校验实现

需求

实现逻辑接收用户输入的DD-MM-YYYY格式日期字符串,拆分输出日、月、年字段,同时满足以下校验规则:

  • 日取值范围1-31
  • 月取值范围1-12
  • 年份不小于1900

原代码报错原因

运行触发TypeError: '>' not supported between instances of 'str' and 'int',是因为字符串切片得到的日、月、年字段都是字符串类型,Python不支持直接用比较运算符对比字符串和整数的大小。
原代码额外存在3处逻辑问题:

  • 范围判断的逻辑符使用错误:D>31 and D<1这类条件永远无法成立,一个值不可能同时大于31且小于1,越界判断应该用or连接两个条件
  • 年份校验阈值错误:需求要求年份≥1900,原代码写为1990
  • 无基础格式校验:没有判断输入长度、分隔符位置是否合规,容易出现切片取值错位

修正实现

不需要修改原始输入的字符串类型,仅需在做数值校验时,把切片得到的子串临时转为整数比较即可,原始输入、用于输出的字段都可以保留字符串类型。
修正后代码:

# 原始输入全程保持字符串类型
FullDate = input("enter todays date(format: DD-MM-YYYY): ")
validate_pass = True

# 先校验基础格式,避免切片错位
if len(FullDate) != 10 or FullDate[2] != '-' or FullDate[5] != '-':
    print("invalid input format, please enter as DD-MM-YYYY")
    validate_pass = False
else:
    # 切片得到字符串类型的日、月、年,用于后续输出
    day_str = FullDate[:2]
    month_str = FullDate[3:5]
    year_str = FullDate[6:]

    # 临时转换为整数做数值校验,不改变原字段的字符串类型
    try:
        day = int(day_str)
        month = int(month_str)
        year = int(year_str)
    except ValueError:
        print("invalid input, date can only contain numbers and '-' separator")
        validate_pass = False
    else:
        # 校验日范围
        if day < 1 or day > 31:
            print("invalid date")
            validate_pass = False
        # 校验月范围
        if month < 1 or month > 12:
            print("invalid month")
            validate_pass = False
        # 校验年范围
        if year < 1900:
            print("invalid year")
            validate_pass = False

# 所有校验通过后输出字段
if validate_pass:
    print("the day is", day_str)
    print("the month is", month_str)
    print("the year is", year_str)

实现说明

  • 原始输入FullDate始终为字符串类型,符合要求
  • 输出用的day_str/month_str/year_str都是从原字符串直接切片得到的字符串,仅在校验环节临时转整数做数值比较,不会修改原数据类型
  • 新增了格式校验、非数字字符校验,避免非法输入导致程序崩溃
  • 修正了原代码中逻辑运算符、校验阈值、输出文案的笔误

内容的提问来源于stack exchange,提问作者stactharover

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 08:51:32