2017-12-02 8 views
0

間隔内のすべての日付を取得します。私は、またのpython - 例えば、二つの日付を考える

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

December 1, 2017 
June 1, 2018 

私はこの結果を取得したいですまた、間隔を変更したい。上記の場合、間隔は毎月です。私はまた、それが四半期および半年になることを望んでいます。終了日も

を含まなければならないことを意味する

ので、December 1, 2017June 1, 2018与えられ、それはそうで半年間とのためMarch 1, 2018を生成します...

私もそれが包括たいがありますこれのためのpythonパッケージまたは関数?

+2

[一定期間の月の最初の日のPythonのリスト]の可能な重複(https://stackoverflow.com/questions/22696662/python-list-of-first-day-of-month-for-与えられた期間) –

+2

あなたはこれまでに何を試しましたか?また、この質問をチェックしてください:https://stackoverflow.com/questions/993358/creating-a-range-of-dates-in-python –

答えて

1

Pendulum — and specifically its 'range' function —です。

これは、月間間隔の日付と3ヶ月間隔の日付を意味するものの両方を表示します。

>>> 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

パンダには、機能のかなり良い日時ライブラリがあります。

import pandas as pd 

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

毎月1日取得:あなたはfreq値のためthis chartを使用することができます

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'] 

を。

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

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