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

如何在Python中实现起止日期验证及月度日期区间生成?

实现月度日期区间生成工具(Python)

功能说明

根据输入的起止日期(格式DD/MM/YYYY,用逗号分隔),生成包含每个月份首尾日期的区间列表,自动处理跨年度、月末边界及日期合法性验证。

完整代码实现

import datetime

def get_month_interval_list(start_date_str, end_date_str):
    # 日期解析格式
    date_format = "%d/%m/%Y"
    try:
        # 转换为date对象
        start_date = datetime.datetime.strptime(start_date_str.strip(), date_format).date()
        end_date = datetime.datetime.strptime(end_date_str.strip(), date_format).date()
    except ValueError as e:
        raise ValueError(f"日期格式错误或日期无效:{e}")
    
    if start_date > end_date:
        raise ValueError("开始日期不能晚于结束日期")
    
    interval_list = []
    current_month_start = datetime.date(start_date.year, start_date.month, 1)
    
    while current_month_start <= end_date:
        # 计算当前月的结束日期:如果是结束日期所在月,取end_date,否则取当月最后一天
        next_month_start = datetime.date(current_month_start.year + current_month_start.month // 12, 
                                        (current_month_start.month % 12) + 1, 1)
        current_month_end = next_month_start - datetime.timedelta(days=1)
        
        if current_month_end > end_date:
            current_month_end = end_date
        
        # 按指定格式添加到列表(这里用YYYY-MM-DD格式,可按需修改)
        interval_list.append(f"{current_month_start.strftime('%Y-%m-%d')} 至 {current_month_end.strftime('%Y-%m-%d')}")
        
        # 跳到下一个月的第一天
        current_month_start = next_month_start
    
    return interval_list

# 示例使用
if __name__ == "__main__":
    user_input = input("请输入起止日期(格式:DD/MM/YYYY, DD/MM/YYYY):")
    try:
        start_str, end_str = user_input.split(",")
        intervals = get_month_interval_list(start_str, end_str)
        print("\n月度日期区间列表:")
        for idx, interval in enumerate(intervals, 1):
            print(f"{idx}. {interval}")
    except ValueError as e:
        print(f"错误:{e}")

关键逻辑解释

  • 日期验证与转换:用strptime解析输入字符串,捕获格式错误或无效日期(如2月30日),同时检查开始日期是否早于结束日期。
  • 月度首尾计算:通过获取下一个月第一天再减一天的方式,无需依赖第三方库,直接用datetime模块实现月末日期计算。
  • 循环终止条件:当当前月的第一天超过结束日期时停止循环,确保最后一个区间的结束日期不会超出用户指定的结束日期。

示例运行

输入:02/12/2022, 24/02/2023
输出:
月度日期区间列表:

  1. 2022-12-01 至 2022-12-31
  2. 2023-01-01 至 2023-01-31
  3. 2023-02-01 至 2023-02-24

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 04:05:23