Python list of the first day of the month for a given period

I am trying to find an effective way to create a list of dates, including only the first day of the month for a specific period. Something like this, but better:

import datetime
dates = [
  datetime.date (2014, 4, 1),
  datetime.date (2014, 5, 1),
  datetime.date (2014, 6, 1),
  datetime.date (2014, 7, 1),
  datetime.date (2014, 8, 1),
  datetime.date (2014, 9, 1),
  datetime.date (2014, 10, 1),
  datetime.date (2014, 11, 1),
  datetime.date (2014, 12, 1),
  datetime.date (2015, 1, 1),
  datetime.date (2015, 2, 1)]

Alternatively, some direction for Google for this. Hooray!

+4
source share
5 answers
>>> startyear = 2014
>>> startmonth = 4
>>> endyear = 2015
>>> endmonth = 2
>>> [datetime.date(m/12, m%12+1, 1) for m in xrange(startyear*12+startmonth-1, endyear*12+endmonth)]
[datetime.date(2014, 4, 1), datetime.date(2014, 5, 1), datetime.date(2014, 6, 1), datetime.date(2014, 7, 1), datetime.date(2014, 8, 1), datetime.date(2014, 9, 1), datetime.date(2014, 10, 1), datetime.date(2014, 11, 1), datetime.date(2014, 12, 1), datetime.date(2015, 1, 1), datetime.date(2015, 2, 1)]

For Python 3, you need to use rangeinstead of xrangeand //( gender separation ) instead /(which does float division in Python 3):

[datetime.date(m//12, m%12+1, 1) for m in range(startyear*12+startmonth-1, endyear*12+endmonth)]
+6
source

If you create a list in just a few years, efficiency should not be a problem. Code clarity is the most important aspect.

dates = []
date = datetime.date.today()
while date.year < 2015:
    if date.day == 1:
        dates.append(date)
    date += datetime.timedelta(days=1)
+2
source

:

import datetime
from pprint import pprint

dt = datetime.date.today()
end = datetime.date(2015, 2, 1)
dates = []

while dt < end:
    if not dt.month % 12:
        dt = datetime.date(dt.year+1, 1, 1)
    else:
        dt = datetime.date(dt.year, dt.month+1, 1)
    dates.append(dt)

pprint(dates)

:

[datetime.date(2014, 4, 1),
 datetime.date(2014, 5, 1),
 datetime.date(2014, 6, 1),
 datetime.date(2014, 7, 1),
 datetime.date(2014, 8, 1),
 datetime.date(2014, 9, 1),
 datetime.date(2014, 10, 1),
 datetime.date(2014, 11, 1),
 datetime.date(2014, 12, 1),
 datetime.date(2015, 1, 1),
 datetime.date(2015, 2, 1)]
+2

relativedelta from dateutil, :

from datetime import date
from dateutil.relativedelta import relativedelta

def mthStList(start_date, end_date):
    stdt_list = []
    cur_date = start_date.replace(day=1) # sets date range to start of month
    while cur_date <= end_date:
        stdt_list.append(cur_date)
        cur_date += relativedelta(months=+1)
    return stdt_list

mthStList(date(2012, 5, 26), date.today())
+1
source

With pandas:

   dates= pd.date_range('2018-01-01','2020-01-01' , freq='1M')-pd.offsets.MonthBegin(1)

result:

`DatetimeIndex(['2018-01-01', '2018-02-01', '2018-03-01', '2018-04-01',
               '2018-05-01', '2018-06-01', '2018-07-01', '2018-08-01',
               '2018-09-01', '2018-10-01', '2018-11-01', '2018-12-01',
               '2019-01-01', '2019-02-01', '2019-03-01', '2019-04-01',
               '2019-05-01', '2019-06-01', '2019-07-01', '2019-08-01',
               '2019-09-01', '2019-10-01', '2019-11-01', '2019-12-01'],
              dtype='datetime64[ns]', freq='MS')
0
source

Source: https://habr.com/ru/post/1533791/


All Articles