如何从datetime.timedelta对象中分别提取小时、分钟和秒?
解决方案
首先,你的代码缺少import datetime语句,需要在开头补上。另外,直接通过时间分量差值构建timedelta可能会出现负数(比如结束时间分钟数小于开始时间),更稳妥的方式是先将datetime.time转换为当天的datetime.datetime对象,再计算差值:
import datetime print("Enter your start time!") time1h = int(input("Hour: ")) time1m = int(input("Minute: ")) time1s = int(input("Second: ")) print("Enter your finishing time!") time2h = int(input("Hour: ")) time2m = int(input("Minute: ")) time2s = int(input("Second: ")) # 将time对象转为当天的datetime对象,避免分量差值为负的问题 today = datetime.date.today() dt1 = datetime.datetime.combine(today, datetime.time(time1h, time1m, time1s)) dt2 = datetime.datetime.combine(today, datetime.time(time2h, time2m, time2s)) diff = dt2 - dt1 # 提取小时、分钟、秒 total_seconds = diff.total_seconds() diff_hours = int(total_seconds // 3600) remaining_seconds = total_seconds % 3600 diff_minutes = int(remaining_seconds // 60) diff_seconds = int(remaining_seconds % 60) # 格式化输出 print(f"您的用时为{diff_hours}小时,{diff_minutes}分钟,{diff_seconds}秒")
关键说明:
datetime.timedelta没有直接的hour/minute属性,只能通过total_seconds()总秒数换算时分秒- 将
time转为当天的datetime再计算差值,能自动处理跨分钟、小时的异常情况(比如开始时间是10:50,结束是11:10,直接算分量差会得到分钟-40,转datetime后差值是正确的20分钟)
内容的提问来源于stack exchange,提问作者Mahdi
相关产品推荐
相关产品推荐

