Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from datetime import datetime, timedelta
- class DateIterator:
- def __init__(self, from_date: datetime, to_date: datetime, interval: timedelta, closed: bool = True):
- assert (from_date < to_date), 'to_date must be greater than from_date'
- self.from_date = from_date
- self.to_date = to_date
- self.interval = interval
- self.closed = closed
- self.total_times = None
- self.current_position = None
- self._init_iterator()
- def _init_iterator(self):
- self._calculate_total_times()
- self.current_position = 0
- def _calculate_total_times(self):
- self.total_times = (self.to_date - self.from_date) / self.interval
- is_exact_fit = self.total_times.is_integer()
- if not is_exact_fit and self.closed:
- self.total_times += 1
- self.total_times = int(self.total_times)
- def __iter__(self):
- self._init_iterator()
- return self
- def __next__(self):
- if self.current_position >= self.total_times:
- raise StopIteration
- interval_start_date = self.from_date + self.interval * self.current_position
- interval_end_date = interval_start_date + self.interval
- self.current_position += 1
- return interval_start_date, interval_end_date
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement