2011-05-18 36 views
1

我有2个日期时间值:'开始'和'结束'。我想返回一个完全落在两个(含)之间的小时的所有日期时间的列表。Python获取2个日期时间对象之间的整个小时值

例如'开始'是09:30,'结束'是14:00(同一天)。我想返回的价格是10:00,11:00,12:00,13:00和14:00。

我想你会做的是在'开始'后的下一整小时,将它添加到一个空白列表,然后创建一个循环添加和小时,测试它是否小于(或等于)“结束”并将其附加到列表中。

我无法弄清楚的是如何获得离开始日期时间最近的整个小时。

回答

3

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

如果启动时间正好是在小时和你希望包括它

>>> from datetime import datetime, timedelta 
>>> start_time = datetime.now() 
>>> start_time 
datetime.datetime(2011, 5, 18, 20, 38, 55, 546000) 
>>> first = start_time.replace(minute=0, second=0, microsecond=0)+timedelta(hours=1) 
>>> first 
datetime.datetime(2011, 5, 18, 21, 0) 
>>> 
+0

您可以通过减去微秒来处理开始时间刚好在一小时的特殊情况。 – 2011-05-18 10:51:41

+0

@Sven,你可以做那样的事情,但是OP没有说明是否应该包括开始时间,如果它恰好在一小时内,那么甚至可能不需要特殊情况 – 2011-05-18 10:56:16

+0

如果开始时间应该包括在内正好在一小时内:)这对我来说很好。谢谢Sven,该技巧保存了几行代码 – chrism 2011-05-18 11:11:01

1

要做到这一点是使用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) 
相关问题