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
相关产品推荐
相关产品推荐

