Python时间处理遇ValueError:'00:34 am'不匹配'%I:%M %p'格式
解决时间解析错误并实现加1小时需求
错误原因
%I是Python中12小时制的小时格式符,合法取值范围为01-12,但输入00:34 am使用了00作为小时数,不符合该格式要求,因此触发ValueError。
解决方案
以下两种方法均可解决问题,可根据场景选择:
方法一:预处理输入字符串适配12小时制格式
将12小时制输入中的00:替换为12:(00:34 am本质为午夜12:34),再用原格式解析:
from datetime import datetime, timedelta def add_one_hour(time_str): # 预处理:把am时段的00替换为12 processed_time = time_str.replace("00:", "12:") if "am" in time_str.lower() else time_str dt = datetime.strptime(processed_time, "%I:%M %p") dt += timedelta(hours=1) return dt.strftime("%I:%M %p") original_time_str = '00:34 am' modified_time_str = add_one_hour(original_time_str) print(modified_time_str) # 输出: 01:34 AM
方法二:改用24小时制解析,再转12小时制输出
使用24小时制格式符%H解析输入(00在24小时制中合法),处理后转换为12小时制格式输出:
from datetime import datetime, timedelta def add_one_hour(time_str): # 拆分时间部分与AM/PM标识 time_part, period = time_str.split() dt = datetime.strptime(time_part, "%H:%M") dt += timedelta(hours=1) # 自动转换为带AM/PM的12小时制格式 return dt.strftime("%I:%M %p") original_time_str = '00:34 am' modified_time_str = add_one_hour(original_time_str) print(modified_time_str) # 输出: 01:34 AM
说明
两种方法最终都能正确输出加1小时后的结果,方法二更通用,可兼容更多不规范的12小时制输入。
内容的提问来源于stack exchange,提问作者Gali Ashok
相关产品推荐
相关产品推荐

