我有2個日期時間值:'開始'和'結束'。我想返回一個完全落在兩個(含)之間的小時的所有日期時間的列表。Python獲取2個日期時間對象之間的整個小時值
例如'開始'是09:30,'結束'是14:00(同一天)。我想返回的價格是10:00,11:00,12:00,13:00和14:00。
我想你會做的是在'開始'後的下一整小時,將它添加到一個空白列表,然後創建一個循環添加和小時,測試它是否小於(或等於)「結束」並將其附加到列表中。
我無法弄清楚的是如何獲得離開始日期時間最近的整個小時。
我有2個日期時間值:'開始'和'結束'。我想返回一個完全落在兩個(含)之間的小時的所有日期時間的列表。Python獲取2個日期時間對象之間的整個小時值
例如'開始'是09:30,'結束'是14:00(同一天)。我想返回的價格是10:00,11:00,12:00,13:00和14:00。
我想你會做的是在'開始'後的下一整小時,將它添加到一個空白列表,然後創建一個循環添加和小時,測試它是否小於(或等於)「結束」並將其附加到列表中。
我無法弄清楚的是如何獲得離開始日期時間最近的整個小時。
最簡單的方法是將開始時間的分鐘和秒數替換爲零,然後再添加一小時。
如果啓動時間正好是在小時和你希望包括它
如
>>> 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)
>>>
要做到這一點是使用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)
您可以通過減去微秒來處理開始時間剛好在一小時的特殊情況。 – 2011-05-18 10:51:41
@Sven,你可以做那樣的事情,但是OP沒有說明是否應該包括開始時間,如果它恰好在一小時內,那麼甚至可能不需要特殊情況 – 2011-05-18 10:56:16
如果開始時間應該包括在內正好在一小時內:)這對我來說很好。謝謝Sven,該技巧保存了幾行代碼 – chrism 2011-05-18 11:11:01