datetime 计算时间差 (小时)

因为 datetime 计算时间差,只有 seconds, days,没有 hours,于是,我就利用 seconds / 3600,来计算 hours,但是出现了错误的结果

(new_time - old_time).seconds
(new_time - old_time).days
datetime 计算 hours 案例

from datetime import datetime
def calc_hours(old):
old_time = datetime.strptime(old, “%Y-%m-%d %H:%M:%S,%f”)
new_time = datetime.now()
sec = (new_time - old_time).seconds
return round(sec/3600, 3)

t = ‘2020-11-19 15:04:47,397’
print(calc_hours(t))
计算结果

old_time: 2020-11-19 15:04:47.397000
new_time: 2020-11-21 22:48:12.076836
7.723
对,你没有看错,是 7 小时,19 号和 21 号相差 2 天,结果有问题,然后我又算了下 days 的结果

from datetime import datetime
def calc_hours(old):
old_time = datetime.strptime(old, “%Y-%m-%d %H:%M:%S,%f”)
new_time = datetime.now()
days = (new_time - old_time).days
return days

t = ‘2020-11-19 15:04:47,397’
print(calc_hours(t))
计算结果

old_time: 2020-11-19 15:04:47.397000
new_time: 2020-11-21 22:50:19.873813
2
天数是对的

后来,我又看了下秒数计算的结果,下午 15 点到晚上 22 点多,小时差不多就是 7.723,所以,这个秒数是计算的当天的小时数,而不是总的小时数

因此,想要计算总的小时数,需要把两个时间相加

from datetime import datetime
def calc_hours(old):
old_time = datetime.strptime(old, “%Y-%m-%d %H:%M:%S,%f”)
new_time = datetime.now()
days = (new_time - old_time).days
sec = (new_time - old_time).seconds
hours = days * 24 + round(sec/3600, 3)
return hours
t = ‘2020-11-20 15:04:47,397’
print(calc_hours(t))
计算结果

old_time: 2020-11-19 15:04:47.397000
new_time: 2020-11-21 22:54:27.109447
days: 2
sec: 28179
55.827

作者:随时学丫
链接:https://www.jianshu.com/p/51374fed5a9c
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。