Prova questo:
from datetime import datetime
from dateutil.relativedelta import relativedelta
def date_range(start_date, end_date, increment, period):
result = []
nxt = start_date
delta = relativedelta(**{period:increment})
while nxt <= end_date:
result.append(nxt)
nxt += delta
return result
L'esempio nella domanda, "ogni 8 ore tra oggi e domani 19:00" dovranno essere scritte in questo modo:
start_date = datetime.now()
end_date = start_date + relativedelta(days=1)
end_date = end_date.replace(hour=19, minute=0, second=0, microsecond=0)
date_range(start_date, end_date, 8, 'hours')
Si noti che i valori validi per period
sono quelli definiti per l'informazione relativa relativedelta
, ovvero: 'years', 'months', 'weeks', 'days', 'hours', 'minutes', 'seconds', 'microseconds'
.
La mia soluzione restituisce un elenco, come richiesto nella domanda. Se non hai bisogno di tutti gli elementi contemporaneamente puoi usare i generatori, come nella risposta @MartijnPieters.
fonte
2012-05-21 15:40:18
Python dovrebbe consentire le date in "intervallo". Avrebbe solo un senso. C'è un motivo per cui è debole digitata ... –
@TylerCrompton: "L'esplicito è meglio che implicito." Cosa sarebbe incrementato nell'intervallo: giorni, secondi, microsecondi, millisecondi, minuti, ore o settimane? –
@NoctisSkytower Il valore del passo sarebbe un oggetto 'timedelta'. –