2011-05-18 87 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) 
相關問題