Given a date range how can we break it up into N contiguous sub-intervals?

前端 未结 6 1482
长情又很酷
长情又很酷 2020-12-15 21:18

I am accessing some data through an API where I need to provide the date range for my request, ex. start=\'20100101\', end=\'20150415\'. I thought I would speed this up by

6条回答
  •  暗喜
    暗喜 (楼主)
    2020-12-15 21:36

    I've created a function, which includes the end date in date split.

    
    from dateutil import rrule
    from dateutil.relativedelta import relativedelta
    from dateutil.rrule import DAILY
    
    
    def date_split(start_date, end_date, freq=DAILY, interval=1):
        """
    
        :param start_date:
        :param end_date:
        :param freq: refer rrule arguments can be SECONDLY, MINUTELY, HOURLY, DAILY, WEEKLY etc
        :param interval: The interval between each freq iteration.
        :return: iterator object
        """
        # remove microsecond from date object as minimum allowed frequency is in seconds.
        start_date = start_date.replace(microsecond=0)
        end_date = end_date.replace(microsecond=0)
        assert end_date > start_date, "end_date should be greated than start date."
        date_intervals = rrule.rrule(freq, interval=interval, dtstart=start_date, until=end_date)
        for date in date_intervals:
            yield date
        if date != end_date:
            yield end_date
    

提交回复
热议问题