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

Celery任务中调用日期时间函数出现DateTime格式不匹配错误求助

解决Celery任务中时间格式匹配错误的方案

问题根源

你的时间字符串是ISO 8601格式(日期和时间用T分隔,如2023-02-16T14:38:33.301574),但解析时用的格式化字符串是%Y-%m-%d %H:%M:%S.%f(日期和时间用空格分隔),两者格式不匹配导致报错。普通场景正常是因为当时传入的时间字符串格式和格式化规则一致,而Celery任务中传递的参数被序列化成了ISO格式的字符串。

具体解决办法

  • 方法一:修改格式化字符串适配ISO格式
    把解析时的格式改为带T的版本,直接匹配目标字符串:

    from datetime import datetime
    
    def calculate_time_diff(start_time_str, end_time_str):
        fmt = '%Y-%m-%dT%H:%M:%S.%f'
        start_dt = datetime.strptime(start_time_str, fmt)
        end_dt = datetime.strptime(end_time_str, fmt)
        return end_dt - start_dt
    
  • 方法二:使用ISO格式专用解析方法(推荐)
    Python 3.7+提供了datetime.fromisoformat(),可以直接解析标准ISO格式的时间字符串,无需手动写格式化规则,兼容性更强:

    from datetime import datetime
    
    def calculate_time_diff(start_time_str, end_time_str):
        start_dt = datetime.fromisoformat(start_time_str)
        end_dt = datetime.fromisoformat(end_time_str)
        return end_dt - start_dt
    

额外排查点

检查Celery任务的参数传递逻辑:如果任务接收的是datetime对象,可能在序列化(比如JSON序列化)过程中被转换成了ISO格式字符串。可以考虑在任务接收端统一处理时间参数,或者在发送任务时确保传递的时间格式和解析规则一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 01:15:30