计算python中的小时和分钟

Calculating hours and minutes in python

我有一个任务需要计算马拉松的运行时间。我以这个为起点

1
2
3
start_hour = 3
start_minute = 48
length = 172

基本上开始时间是3:48,持续172分钟。我的任务是找出马拉松的结束时间。结束时间应该是3:48格式,分钟和小时转换成字符串,并与":"组合在一起。我已经花了1个半小时的时间,仍然无法解决问题。这就是我得出的结论:

1
2
3
4
5
6
7
endhour = start_hour + (length // 60)
endminute = start_minute + (length % 60)
end_minutee = endminute % 60
format(endhour)
endhourAsStr = str(endhour)
end_minuteeAsStr = str(end_minutee)
print(endhourAsStr +":" + end_minuteeAsStr)

但当我打印的最后一个小时比1小时短。我猜我需要对>或<做些什么,但我真的想不出来。我猜我只需要最后一次推。我对编程很陌生,我没有任何经验。


您可以使用一些datetime诡计来获得保证正确的结果:

1
2
3
4
5
6
7
start_hour = 3
start_minute = 48
length = 172

start = datetime.datetime(100, 1, 1, start_hour, start_minute, 0)
end = start + datetime.timedelta(minutes=length)
result = str(end.time())

如果要在结束时去掉:00秒,只需修改最后一行:

1
result = end.strftime('%H:%M')

我更喜欢这种方法,因为它可以解释一些边缘情况,比如从一天午夜开始,到第二天结束。


使用divmod

1
2
3
4
5
6
7
8
start_hour = 3
start_minute = 48
length = 172

elapsed_hours, elapsed_minutes = divmod(length, 60)
extra_hour, finish_minute = divmod(start_minute + elapsed_minutes, 60)
finish_hour = start_hour + elapsed_hours + extra_hour
print("{hour}:{minute}".format(hour=finish_hour, minute=finish_minute))

这假设您不希望任何人在午夜/第二天之后完成。如果你想考虑这种可能性,你可以用24取finish_hour的模量。


把每件事都放在几分钟内,然后按计划完成输出,怎么样?保持简单的理解和阅读:)

1
2
3
4
5
start_time = start_hour*60 + start_minute
end_time = start_time + length
end_hour, end_minute = end_time // 60, end_time % 60
print('{}:{}'.format(end_hour, end_minute))
# 6:40

我建议

1
2
3
4
5
6
7
endhour = start_hour + (length // 60)
endminute = start_minute + (length % 60)
endhour += endminute // 60
endminute = endminute % 60
endhour = endhour % 24

print('{}:{}'.format(endhour, endminute))

在像您一样初始化结束时间和分钟之后,您再次从结束时间中提取分钟和小时。

最后,将小时数调整为0到23之间。