Home > database >  How can I make a list of last two digits of year plus month
How can I make a list of last two digits of year plus month

Time:01-18

Can I get some help to create a list of days and months in the folowing format:

collection = ['2108', '2109', '2110', '2111', '2112', '2201']

I am trying in this way:

def make_collections(start_date: Date, end_date: Date):
    result = []
    date = start_date
    while True:
        if start_date >= end_date:
            return result
        date = date.strftime('%y%m%d%H%M%S')
        result.append(date[:4])
        date = (date.strptime(date, '%y%m%d%H%M%S'))   timedelta(days=1)
        
# test = MakeDataFrame()
# test.run()

if __name__ == '__main__':
    start = datetime.now() - timedelta(days=365)
    print(make_collections(start, datetime.now()))
    

But it doesn't work.

I want to give a start date and end date as an argument in function and make a list as I mentioned above with year and month.

Can I get some help to make a a simple function with start and end date as an arguments? Thanks

CodePudding user response:

I revised your code a little bit, so that the code will print what you expected. I used dateutil.relativedelta module because timedelta provide only day-based delta. dateutil.relativedelta support to calculate month and year differences.

from datetime import datetime, timedelta
from dateutil.relativedelta import relativedelta


def make_collections(start_date, end_date):
    result = []
    while start_date <= end_date:
        result.append(str(start_date.year)[2:]   str(start_date.month).zfill(2))
        start_date  = relativedelta(months=1)
    return result


if __name__ == '__main__':
    start = datetime.now() - timedelta(days=365)
    print(make_collections(start, datetime.now()))

#['2101', '2102', '2103', '2104', '2105', '2106', '2107', '2108', '2109', '2110', '2111', '2112', '2201']
  •  Tags:  
  • Related