Example #1
0
    def expand_datetime_range(timex):
        from datatypes_timex_expression import Timex

        types = timex.types if len(
            timex.types) != 0 else TimexInference.infer(timex)

        if Constants.TIMEX_TYPES_DURATION in types:
            start = TimexHelpers.clone_datetime(timex)
            duration = TimexHelpers.clone_duration(timex)
            return TimexRange(start,
                              TimexHelpers.timex_datetime_add(start, duration),
                              duration)

        else:
            if timex.year is not None:
                start = Timex()
                start.year = timex.year
                result = TimexRange(start, Timex())
                if timex.month is not None:
                    result.start.month = timex.month
                    result.start.day_of_month = 1
                    result.end.year = timex.year
                    result.end.month = timex.month + 1
                    result.end.day_of_month = 1
                else:
                    result.start.month = 1
                    result.start.day_of_month = 1
                    result.end.year = timex.year + 1
                    result.end.month = 1
                    result.end.day_of_month = 1
                return result

        return TimexRange(Timex(), Timex())
Example #2
0
    def timex_date_add(start, duration):
        from datatypes_timex_expression import Timex
        duration_days = duration.days
        if duration.days is None and duration.weeks is not None:
            duration_days = 7 * duration.weeks

        if start.day_of_week:
            end = start.clone()
            if duration.days:
                end.day_of_week += duration.days
            return end

        if start.month is not None and start.day_of_month is not None:
            if duration_days:
                if start.year:
                    d = date(start.year, start.month, start.day_of_month)
                    d = d + timedelta(days=int(duration_days))
                    result = Timex()
                    result.year = d.year
                    result.month = d.month
                    result.day_of_month = d.day
                    return result
                else:
                    d = date(2001, start.month, start.day_of_month)
                    d = d + timedelta(int(duration_days))
                    result = Timex()
                    result.month = d.month
                    result.day_of_month = d.day
                    return result
            if duration.years:
                if start.year:
                    result = Timex()
                    result.year = start.year + duration.years
                    result.month = start.month
                    result.day_of_month = start.day_of_month
                    return result
            if duration.month:
                if start.month:
                    result = Timex()
                    result.year = start.year
                    result.month = start.month + duration.months
                    result.day_of_month = start.day_of_month
                    return result
        return start