如何按小时舍入时间值?

时间:2019-03-11 05:14:32

标签: python time

我需要减去两个表示时间的字符串,并将它们四舍五入一小时。我尝试使用datetime.replacetotal对象的timedelta方法,但是无法调用该方法。如何舍入total

from datetime import datetime, timedelta
start = '23:14'
end = '03:34'
total = datetime.strptime(end,'%H:%M') - datetime.strptime(start, '%H:%M')

2 个答案:

答案 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)