2017-12-02 13 views
0

zwei Daten gegeben, zum Beispiel:python - Erhalten Sie alle Termine innerhalb eines Intervalls

December 1, 2017 
June 1, 2018 

ich dieses Ergebnis erhalten möchten:

January 1, 2018 
February 1, 2018 
March 1, 2018 
April 1, 2018 
May 1, 2018 
June 1, 2018 

Außerdem habe ich möchte auch die Intervalle ändern. Im obigen Fall ist das Intervall monatlich. Ich möchte auch, dass es vierteljährlich und halbjährlich wird.

So gegeben December 1, 2017 und June 1, 2018, wird es March 1, 2018 für Halbjahr erzeugen und so weiter ...

ich mag es auch inklusive, was bedeutet, dass das Enddatum auch

aufgenommen werden sollte

Gibt es ein Python-Paket oder eine Funktion dafür?

+2

Mögliches Duplikat [Python-Liste von ersten Tag des Monats für bestimmten Zeitraum] (https://stackoverflow.com/questions/22696662/python-list-of-first-day-of-month-for- gegebener Zeitraum) –

+2

Was hast du bisher versucht? Überprüfen Sie auch diese Frage: https://stackoverflow.com/questions/993358/creating-a-range-of-dates-in-python –

Antwort

1

Pendulum — and specifically its 'range' function — ist gut für diese.

Es wird Ihnen sowohl die monatlichen Intervalldaten und was ich nehme Sie bedeuten drei Monate Intervalldaten.

>>> import pendulum 
>>> start = pendulum.Pendulum(2017, 12, 1) 
>>> end = pendulum.Pendulum(2018, 6, 1) 
>>> period = pendulum.period(start, end) 
>>> [dt.format('%Y-%m-%d') for dt in period.range('months')] 
['2017-12-01', '2018-01-01', '2018-02-01', '2018-03-01', '2018-04-01', '2018-05-01', '2018-06-01'] 
>>> [dt.format('%Y-%m-%d') for dt in period.range('months', 3)] 
['2017-12-01', '2018-03-01', '2018-06-01'] 
1
from datetime import datetime 

def mrange(d1, d2,s=0): #s for semi-annual 
    while d1<d2: 
     y,m=divmod(d1.month+1,12) 
     d1=datetime(d1.year+y,m,1) 
     if not s or d1.month==3 : 
      yield d1 


d1='December 1, 2017' 
d2='June 1, 2018' 
d1 = datetime.strptime(d1,'%B %d, %Y') 
d2 = datetime.strptime(d2,'%B %d, %Y') 
for s in mrange(d1, d2,):print(s.strftime('%B %d, %Y')) 
print('--'*25) 
for s in mrange(d1, d2,1):print(s.strftime('%B %d, %Y')) 
2

Pandas hat eine ziemlich gute Datetime-Bibliothek von Funktionen.

import pandas as pd 

start = pd.to_datetime('December 1, 2017') 
end = pd.to_datetime('June 1, 2018') 

Erhalten ersten Tag eines jeden Monats:

pd.date_range(start, end, freq='MS').strftime('%B %d, %Y').tolist() 

['December 01, 2017', 
'January 01, 2018', 
'February 01, 2018', 
'March 01, 2018', 
'April 01, 2018', 
'May 01, 2018', 
'June 01, 2018'] 

Wo Sie this chart für freq Werte verwenden können.

pd.date_range(start, end, freq='QS').strftime('%B %d, %Y').tolist() 

['January 01, 2018', 'April 01, 2018'] 
Verwandte Themen