Creating a range of dates in Python

后端 未结 20 2355
栀梦
栀梦 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:40

    You can write a generator function that returns date objects starting from today:

    import datetime
    
    def date_generator():
      from_date = datetime.datetime.today()
      while True:
        yield from_date
        from_date = from_date - datetime.timedelta(days=1)
    

    This generator returns dates starting from today and going backwards one day at a time. Here is how to take the first 3 dates:

    >>> import itertools
    >>> dates = itertools.islice(date_generator(), 3)
    >>> list(dates)
    [datetime.datetime(2009, 6, 14, 19, 12, 21, 703890), datetime.datetime(2009, 6, 13, 19, 12, 21, 703890), datetime.datetime(2009, 6, 12, 19, 12, 21, 703890)]
    

    The advantage of this approach over a loop or list comprehension is that you can go back as many times as you want.

    Edit

    A more compact version using a generator expression instead of a function:

    date_generator = (datetime.datetime.today() - datetime.timedelta(days=i) for i in itertools.count())
    

    Usage:

    >>> dates = itertools.islice(date_generator, 3)
    >>> list(dates)
    [datetime.datetime(2009, 6, 15, 1, 32, 37, 286765), datetime.datetime(2009, 6, 14, 1, 32, 37, 286836), datetime.datetime(2009, 6, 13, 1, 32, 37, 286859)]
    

提交回复
热议问题