Python获取两个datetime对象之间的整小时值

Python获取两个datetime对象之间的整小时值,python,datetime,Python,Datetime,我有两个日期时间值:“开始”和“结束”。我想返回一个所有日期时间的列表,这些日期时间正好位于两者之间的小时(包括) 例如,“开始”是09:30,“结束”是14:00(同一天)。我希望返回的值是10:00、11:00、12:00、13:00、14:00 我想你应该做的是在“开始”之后得到下一个完整的小时,将它添加到一个空白列表中,然后创建一个循环来添加和小时,测试它是否小于(或等于)“结束”,如果为真,则将它附加到列表中 我搞不懂的是如何得到最接近开始日期时间的整小时。最简单的方法是将开始时间的分

我有两个日期时间值:“开始”和“结束”。我想返回一个所有日期时间的列表,这些日期时间正好位于两者之间的小时(包括)

例如,“开始”是09:30,“结束”是14:00(同一天)。我希望返回的值是10:00、11:00、12:00、13:00、14:00

我想你应该做的是在“开始”之后得到下一个完整的小时,将它添加到一个空白列表中,然后创建一个循环来添加和小时,测试它是否小于(或等于)“结束”,如果为真,则将它附加到列表中


我搞不懂的是如何得到最接近开始日期时间的整小时。

最简单的方法是将开始时间的分和秒替换为零,然后再加上一小时

如果开始时间正好是小时,并且您希望将其包括在内,则需要特殊情况

乙二醇


最简单的方法是将开始时间的分和秒替换为零,然后再加上一小时

如果开始时间正好是小时,并且您希望将其包括在内,则需要特殊情况

乙二醇


最好的方法是使用timedelta

>>> from datetime import datetime, timedelta
>>> start = datetime.now()
>>> if start.minute >= 30:
...     start.replace(minute=0)+timedelta(hours=1)
... else:
...     start.replace(minute=0)

最好的方法是使用timedelta

>>> from datetime import datetime, timedelta
>>> start = datetime.now()
>>> if start.minute >= 30:
...     start.replace(minute=0)+timedelta(hours=1)
... else:
...     start.replace(minute=0)

您可以通过减去一微秒来处理开始时间正好在小时上的特殊情况。@Sven,您可以这样做,但是OP没有指定如果开始时间正好在小时上,是否应该包括开始时间,所以这个特例可能根本不需要。如果正好在时间上,那么应该包括开始时间:)这对我来说非常有效。也谢谢Sven,这个技巧节省了几行代码。你可以通过减去一微秒来处理开始时间正好在小时上的特殊情况。@Sven,你可以这样做,但OP没有指定如果开始时间正好在小时上,是否应该包括开始时间,所以这个特例可能根本不需要。如果正好在时间上,那么应该包括开始时间:)这对我来说非常有效。也谢谢Sven,这个技巧节省了几行代码