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

如何不使用额外Python库实现含月份计算的日期时间相加与取整

Python 无第三方库实现非标准月日时分格式时间相加方案

核心难点

  • 原生timedelta不支持月份维度计算,不同月份的天数受年份影响,手动换算易出错
  • 输入存在超范围的非标准时间值(例如%06-%80-%99-%99可直接理解为6个月+80天+99小时+99分钟的增量),需要实现各维度的自动进位取整

实现思路

绕开手动编写进位逻辑的繁琐操作,通过锚定固定基准年的方式,把所有维度的时间增量都转为datetime对象的偏移计算,由Python标准库自动处理所有边界进位:

  1. 拆分输入字符串为月、日、时、分四个独立的整数值,无需提前校验数值范围
  2. 单独处理月份累加的年月换算,解决timedelta不支持月份偏移的问题
  3. 日、时、分维度的偏移直接交给timedelta处理,自动完成跨月、24小时转天、60分钟转小时等取整逻辑

实现代码

from datetime import datetime, timedelta

def add_mdhm(time_str1: str, time_str2: str, base_year: int = 2024) -> str:
    # 解析输入字符串,提取月、日、时、分整数
    def parse_str(s: str) -> tuple[int, int, int, int]:
        return tuple(map(int, s.strip("%").split("-")))
    
    m1, d1, h1, mi1 = parse_str(time_str1)
    m2, d2, h2, mi2 = parse_str(time_str2)

    # 处理月份累加与年月换算
    total_month = m1 + m2
    target_year = base_year + (total_month - 1) // 12
    target_month = (total_month - 1) % 12 + 1
    # 生成月份偏移后的临时基准时间
    temp_base = datetime(target_year, target_month, 1, 0, 0)
    # 累加日、时、分偏移,自动处理所有进位逻辑
    result = temp_base + timedelta(
        days=d1 + d2 - 1,
        hours=h1 + h2,
        minutes=mi1 + mi2
    )
    # 格式化输出为目标格式,自动补前导零
    return result.strftime("%m-%d-%H-%M")

# 测试示例
if __name__ == "__main__":
    test_res = add_mdhm("%06-%80-%99-%99", "%07-%17-%20-%12")
    print(test_res)

注意事项

  • 可根据业务需求调整base_year参数,若需要按闰年计算2月天数,传入对应闰年即可
  • 若输入为实际时间而非增量值,只需调整解析逻辑,将输入的月日时分与基准年拼接为完整datetime对象后再做差值计算即可

内容的提问来源于stack exchange,提问作者Ислам Малахов

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:54:04