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())
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