我需要减去两个表示时间的字符串,并将它们四舍五入一小时。我尝试使用datetime.replace
是total
对象的timedelta
方法,但是无法调用该方法。如何舍入total
?
from datetime import datetime, timedelta
start = '23:14'
end = '03:34'
total = datetime.strptime(end,'%H:%M') - datetime.strptime(start, '%H:%M')
答案 0 :(得分:0)
您需要添加一天以确保它将来始终可用。属性total.seconds不是总持续时间。这是错误的快捷方式。
from datetime import datetime, timedelta
start = datetime.strptime('23:14','%H:%M')
end = datetime.strptime('03:34', '%H:%M')
print(' start', start)
total = end - start # wrong
print('1. end ', end)
print(' total', total)
print(' seconds', total.seconds)
print(' total_seconds', total.total_seconds())
if end < start: # correct
end += timedelta(days=1)
total = end - start
print('2. end ', end)
print(' total', total)
print(' seconds', total.seconds)
print(' total_seconds', total.total_seconds())
rounded_up_hours = round((total.total_seconds() + 1800.)/3600.)
print('rounded_up_hours', rounded_up_hours)
输出:
start 1900-01-01 23:14:00
1. end 1900-01-01 03:34:00
total -1 day, 4:20:00
seconds 15600
total_seconds -70800.0
2. end 1900-01-02 03:34:00
total 4:20:00
seconds 15600
total_seconds 15600.0
rounded_up_hours 5
答案 1 :(得分:0)
timedelta对象表示持续时间,即两个日期或时间之间的差。 class datetime.timedelta([天[,秒[,微秒[,毫秒[,分钟[,小时[,星期]]]]]]]]])) 所有参数都是可选的,默认为0。参数可以是整数,长整型或浮点型,可以是正数或负数。
内部仅存储天,秒和微秒。 实例方法: timedelta.total_seconds() 返回持续时间中包含的总秒数 使用此方法,我们可以计算出小时差,如下所示:
from datetime import datetime, timedelta
start = '23:14'
end = '03:34'
total = datetime.strptime(end,'%H:%M') - datetime.strptime(start, '%H:%M')
round((total.total_seconds())/3600)