Valid time steps for this service as a list of datetime objects.

def time_stops(self):
        """ Valid time steps for this service as a list of datetime objects. """

        if not self.supports_time:
            return []

        if self.service.calendar == 'standard':
            units = self.service.time_interval_units
            interval = self.service.time_interval
            steps = [self.time_start]

            if units in ('years', 'decades', 'centuries'):
                if units == 'years':
                    years = interval
                elif units == 'decades':
                    years = 10 * interval
                else:
                    years = 100 * interval

                next_value = lambda x: x.replace(year=x.year + years)
            elif units == 'months':
                def _fn(x):
                    year = x.year + (x.month+interval-1) // 12
                    month = (x.month+interval) % 12 or 12
                    day = min(x.day, calendar.monthrange(year, month)[1])

                    return x.replace(year=year, month=month, day=day)
                next_value = _fn
            else:
                if units == 'milliseconds':
                    delta = timedelta(milliseconds=interval)
                elif units == 'seconds':
                    delta = timedelta(seconds=interval)
                elif units == 'minutes':
                    delta = timedelta(minutes=interval)
                elif units == 'hours':
                    delta = timedelta(hours=interval)
                elif units == 'days':
                    delta = timedelta(days=interval)
                elif units == 'weeks':
                    delta = timedelta(weeks=interval)
                else:
                    raise ValidationError(
                        "Service has an invalid time_interval_units: {}".format(self.service.time_interval_units)
                    )

                next_value = lambda x: x + delta

            while steps[-1] < self.time_end:
                value = next_value(steps[-1])
                if value > self.time_end:
                    break
                steps.append(value)
            return steps

        else:
            # TODO
            raise NotImplementedError