(b_datedays):
    day = datetime.timedelta(=)
    i (days):
        b_date + day * i


(start_date=end_date=):
    (start_datedatetime.datetime) (end_datedatetime.datetime):
        start = start_date
        end = end_date
    :
        start = datetime.datetime.strptime(start_date)
        end = datetime.datetime.strptime(end_date)
    end = end + datetime.timedelta(=)
    data = []
    d gen_dates(start(end - start).days):
        data.append(d.strftime())
    data
ParseDate(TimeSpecType):
    DaysOneWeek = DaysOneWeek
    DaysOneMonth = DaysOneMonth  ():
        .__choices__ = (
            (.day.parse_date_by_day)(.week.parse_date_by_week)(.month.parse_date_by_month)
        )

    (value):
        _names = ((e[]e[]) e .__choices__)
        _names.get(value) (value):
        _names = ((e[]e[]) e .__choices__)
        _names.get(value) (start_dateend_date):
        weeklist = []
        (start_datedatetime.datetime) (end_datedatetime.datetime):
            start = start_date
            end = end_date
        :
            start = datetime.datetime.strptime(start_date)
            end = datetime.datetime.strptime(end_date)
        max_timedelta = end - start
        max_weeks = (math.ceil(max_timedelta.days / .DaysOneWeek) + )  first_start_week_day = start.weekday()
        first_week_sunday = start + datetime.timedelta(=(.DaysOneWeek - first_start_week_day - ))  first_week_sunday >= end:
            temp = {: start: end}
            weeklist.append(temp)
            weeklist
        :
            temp = {: start: first_week_sunday}
            weeklist.append(temp)
            i (max_weeks):
                monday = first_week_sunday + datetime.timedelta(==i)
                sunday = monday + datetime.timedelta(=)
                monday >= end:
                    temp = {: monday: end}
                    weeklist.append(temp)
                    sunday <= end:
                    temp = {: monday: sunday}
                    weeklist.append(temp)
                :
                    temp = {: monday: end}
                    weeklist.append(temp)
                    weeklist

    (start_dateend_date):
        monthlist = []
        (start_datedatetime.datetime) (end_datedatetime.datetime):
            start = start_date
            end = end_date
        :
            start = datetime.datetime.strptime(start_date)
            end = datetime.datetime.strptime(end_date)
        max_timedelta = end - start
        max_months = (math.ceil(max_timedelta.days / .DaysOneMonth) + )  first_month = start.month  first_year = start.year  firstDayWeekDaymonthlen = calendar.monthrange(first_yearfirst_month)
        last_day_of_first_month = datetime.datetime(=first_year=first_month=monthlen)  last_day_of_first_month >= end:
            temp = {: start: end}
            monthlist.append(temp)
            monthlist
        :
            temp_first_day = last_day_of_first_month + datetime.timedelta(=)
            temp = {: start: last_day_of_first_month}
            monthlist.append(temp)
            i (max_months):
                year = temp_first_day.year
                month = temp_first_day.month
                firstDayWeekDaymonthRange = calendar.monthrange(yearmonth)
                temp_last_day = datetime.datetime(=year=month=monthRange)
                temp_first_day >= end:
                    temp = {: temp_first_day: end}
                    monthlist.append(temp)
                    temp_last_day <= end:
                    temp = {: temp_first_day: temp_last_day}
                    monthlist.append(temp)
                    temp_first_day = temp_last_day + datetime.timedelta(=)
                :
                    temp = {: temp_first_day: end}
                    monthlist.append(temp)
                    monthlist

    (start_dateend_date):
        daylist = []
        days = get_date_list(start_dateend_date)
        day days:
            day_datetime = datetime.datetime.strptime(day)
            temp = {: day_datetime: day_datetime}
            daylist.append(temp)
        daylist