Creating a range of dates in Python

后端 未结 20 2362
栀梦
栀梦 2020-11-22 11:02

I want to create a list of dates, starting with today, and going back an arbitrary number of days, say, in my example 100 days. Is there a better way to do it than this?

20条回答
  •  滥情空心
    2020-11-22 11:45

    Another example that counts forwards or backwards, starting from Sandeep's answer.

    from datetime import date, datetime, timedelta
    from typing import Sequence
    def range_of_dates(start_of_range: date, end_of_range: date) -> Sequence[date]:
    
        if start_of_range <= end_of_range:
            return [
                start_of_range + timedelta(days=x)
                for x in range(0, (end_of_range - start_of_range).days + 1)
            ]
        return [
            start_of_range - timedelta(days=x)
            for x in range(0, (start_of_range - end_of_range).days + 1)
        ]
    
    start_of_range = datetime.today().date()
    end_of_range = start_of_range + timedelta(days=3)
    date_range = range_of_dates(start_of_range, end_of_range)
    print(date_range)
    

    gives

    [datetime.date(2019, 12, 20), datetime.date(2019, 12, 21), datetime.date(2019, 12, 22), datetime.date(2019, 12, 23)]
    

    and

    start_of_range = datetime.today().date()
    end_of_range = start_of_range - timedelta(days=3)
    date_range = range_of_dates(start_of_range, end_of_range)
    print(date_range)
    

    gives

    [datetime.date(2019, 12, 20), datetime.date(2019, 12, 19), datetime.date(2019, 12, 18), datetime.date(2019, 12, 17)]
    

    Note that the start date is included in the return, so if you want four total dates, use timedelta(days=3)

提交回复
热议问题