如何用Python strftime格式化天数与时间并解决ValueError
问题解答
错误原因
你遇到的ValueError核心原因有两个:
- 输入的
'1 day, 2:45:00'是时间间隔字符串,但你误用了专门解析具体日期时间的datetime.strptime,二者定位不匹配。 - 指定的格式字符串
"%H:%M:%S"只覆盖了时分秒部分,完全没匹配前面的天数结构,导致解析逻辑直接失败。
解决方案
根据你的需求,分两种场景给出代码修正方案:
场景1:解析'1 day, 2:45:00'并处理时间格式
如果要解析这类时间间隔字符串,转换成可操作的时间间隔对象,再将时间部分转为12小时制:
from datetime import timedelta actualTime = '1 day, 2:45:00' # 拆分字符串提取天数和时分秒 day_str, time_str = actualTime.split(', ') days = int(day_str.split()[0]) hours, minutes, seconds = map(int, time_str.split(':')) # 构造时间间隔对象 time_delta = timedelta(days=days, hours=hours, minutes=minutes, seconds=seconds) # 将时间部分转为12小时制 hour_12 = hours % 12 period = 'AM' if hours < 12 else 'PM' formatted_time = f"{hour_12:02d}:{minutes:02d} {period}" print(formatted_time) # 输出:02:45 AM # 重新生成'X day, HH:MM:SS'格式的字符串 formatted_delta = f"{time_delta.days} day, {time_delta.seconds//3600}:{(time_delta.seconds%3600)//60}:{time_delta.seconds%60}" print(formatted_delta) # 输出:1 day, 2:45:00
场景2:从时间间隔对象生成目标格式字符串
如果已经有timedelta对象,要输出'1 day, 2:45:00'这种格式:
from datetime import timedelta # 构造一个时间间隔对象(示例) time_delta = timedelta(days=1, hours=2, minutes=45) # 计算时分秒 total_sec = time_delta.total_seconds() hours = int(total_sec // 3600) minutes = int((total_sec % 3600) // 60) seconds = int(total_sec % 60) # 格式化输出 result = f"{time_delta.days} day, {hours}:{minutes}:{seconds}" print(result) # 输出:1 day, 2:45:00
关键提示
strftime是用来格式化**具体日期时间(datetime对象)**的工具,不能直接用来处理时间间隔(timedelta)。如果你的需求是处理天数+时间的间隔,一定要用timedelta类来操作,而不是datetime类。
内容的提问来源于stack exchange,提问作者Baboucarr Badjie
相关产品推荐
相关产品推荐

