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

如何用Python strftime格式化天数与时间并解决ValueError

问题解答

错误原因

你遇到的ValueError核心原因有两个:

  1. 输入的'1 day, 2:45:00'是时间间隔字符串,但你误用了专门解析具体日期时间的datetime.strptime,二者定位不匹配。
  2. 指定的格式字符串"%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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 16:30:58