def year(self) -> int: if (self.__m_year > 0): return self.__m_year if (self.int_value == 0): return 0 if (self.new_age == 0): if (self.int_value < 16): return 2000 + self.int_value if (self.int_value <= ((Utils.getDate(datetime.datetime.today()).year - 2000) + 5)): return 2000 + self.int_value if (self.int_value < 100): return 1900 + self.int_value return self.int_value
def getDatesOld(self, now: datetime.datetime, from0_: datetime.datetime, to: datetime.datetime, can_be_future: bool = False) -> bool: yfrom = None yto = None yfrom_def = False yto_def = False qfrom = None qto = None mfrom = None mto = None dfrom = None dto = None hfrom = None hto = None min_from = None min_to = None for k in range(2): its = (self.items_from if k == 0 else self.items_to) i = 0 v = 0 if ((i < len(its)) and its[i].typ == DateExToken.DateExItemTokenType.YEAR): if (not its[i].is_value_relate): v = its[i].value else: v = (now.year + its[i].value) i += 1 if (k == 0): yfrom = v else: yto = v if (k == 0): yfrom_def = True else: yto_def = True if ((i < len(its)) and its[i].typ == DateExToken.DateExItemTokenType.QUARTAL): if (not its[i].is_value_relate): v = its[i].value else: v = (1 + ((math.floor( ((now.month - 1)) / 4))) + its[i].value) i = len(its) if (k == 0): qfrom = v else: qto = v if ((i < len(its)) and its[i].typ == DateExToken.DateExItemTokenType.MONTH): if (not its[i].is_value_relate): v = its[i].value else: v = (now.month + its[i].value) i += 1 if (k == 0): mfrom = v else: mto = v if ((i < len(its)) and its[i].typ == DateExToken.DateExItemTokenType.DAY): if (not its[i].is_value_relate): v = its[i].value else: v = (now.day + its[i].value) i += 1 if (k == 0): dfrom = v else: dto = v if ((i < len(its)) and its[i].typ == DateExToken.DateExItemTokenType.DAYOFWEEK): v = its[i].value if (its[i].value < 0): v = (-v) ddd = now while True: if (ddd.weekday() == 0): ddd = (ddd + datetime.timedelta(days=-7)) if (v > 1): ddd = (ddd + datetime.timedelta(days=v - 1)) if (k == 0): yfrom = ddd.year mfrom = ddd.month dfrom = ddd.day else: yto = ddd.year mto = ddd.month dto = ddd.day break ddd = (ddd + datetime.timedelta(days=-1)) else: dow = now.weekday() if (dow == 0): dow = 7 ddd = now if (v > dow): ddd = (ddd + datetime.timedelta(days=v - dow)) else: if (can_be_future): ddd = (ddd + datetime.timedelta(days=7)) if (dow > v): ddd = (ddd + datetime.timedelta(days=v - dow)) if (k == 0): yfrom = ddd.year mfrom = ddd.month dfrom = ddd.day else: yto = ddd.year mto = ddd.month dto = ddd.day i += 1 if ((i < len(its)) and its[i].typ == DateExToken.DateExItemTokenType.HOUR): if (not its[i].is_value_relate): v = its[i].value else: v = (now.hour + its[i].value) i += 1 if (k == 0): hfrom = v else: hto = v if ((i < len(its)) and its[i].typ == DateExToken.DateExItemTokenType.MINUTE): if (not its[i].is_value_relate and len(its) > 1): v = its[i].value else: v = (now.minute + its[i].value) i += 1 if (k == 0): min_from = v else: min_to = v if (yfrom is None): if (yto is None): yto = now.year yfrom = yto else: yfrom = yto elif (yto is None): yto = yfrom if (qfrom is None and dfrom is None): qfrom = qto elif (qto is None and dto is None): qto = qfrom if (qfrom is not None): mfrom = (1 + (((qfrom - 1)) * 4)) if (qto is not None): mto = ((qto * 4) - 1) if (mfrom is None and (((dfrom is not None or mfrom is not None or hfrom is not None) or min_from != 0 or len(self.items_from) == 0))): if (mto is not None): mfrom = mto else: mto = now.month mfrom = mto if (mto is None and (((dto is not None or mto is not None or hto is not None) or min_to is not None or len(self.items_to) == 0))): if (mfrom is not None): mto = mfrom else: mto = now.month mfrom = mto if (mfrom is not None): while mfrom > 12: yfrom += 1 mfrom -= 12 while mfrom <= 0: yfrom -= 1 mfrom += 12 else: mfrom = 1 if (mto is not None): while mto > 12: yto += 1 mto -= 12 while mto <= 0: yto -= 1 mto += 12 else: mto = 12 if (dfrom is None and ((hfrom is not None or min_from is not None or len(self.items_from) == 0))): if (dto is not None): dfrom = dto else: dto = now.day dfrom = dto if (dto is None and ((hto is not None or min_to is not None or len(self.items_to) == 0))): if (dfrom is not None): dto = dfrom else: dto = now.day dfrom = dto if (dfrom is not None): while dfrom > Utils.lastDayOfMonth(yfrom, mfrom): dfrom -= Utils.lastDayOfMonth(yfrom, mfrom) mfrom += 1 if (mfrom > 12): mfrom = 1 yfrom += 1 while dfrom <= 0: mfrom -= 1 if (mfrom <= 0): mfrom = 12 yfrom -= 1 dfrom += Utils.lastDayOfMonth(yfrom, mfrom) if (dto is not None): while dto > Utils.lastDayOfMonth(yto, mto): dto -= Utils.lastDayOfMonth(yto, mto) mto += 1 if (mto > 12): mto = 1 yto += 1 while dto <= 0: mto -= 1 if (mto <= 0): mto = 12 yto -= 1 dto += Utils.lastDayOfMonth(yto, mto) elif (dfrom is not None and mfrom == mto and yfrom == yto): dto = dfrom else: dto = Utils.lastDayOfMonth(yto, mto) if (dfrom is None): dfrom = 1 try: from0_.value = datetime.datetime(yfrom, mfrom, dfrom, 0, 0, 0) to.value = datetime.datetime(yto, mto, dto, 0, 0, 0) except Exception as ex: from0_.value = datetime.datetime(1, 1, 1, 0, 0, 0) to.value = datetime.datetime(1, 1, 1, 0, 0, 0) return False if ((not yfrom_def and len(self.items_from) > 0 and Utils.getDate( from0_.value) > Utils.getDate(datetime.datetime.today())) and not can_be_future): if (not yto_def and to.value.year == from0_.value.year): to.value = (to.value + datetime.timedelta(days=-1 * 365)) from0_.value = (from0_.value + datetime.timedelta(days=-1 * 365)) if (hfrom is None and hto is not None): hfrom = hto elif (hto is None and hfrom is not None): hto = hfrom if (min_from is None and min_to is not None): min_from = min_to elif (min_to is None and min_from is not None): min_to = min_from if (hfrom is not None or min_from is not None): if (hfrom is None): hfrom = now.hour if (min_from is None): min_from = 0 while min_from >= 60: hfrom += 1 min_from -= 60 while min_from < 0: hfrom -= 1 min_from += 60 while hfrom >= 24: from0_.value = (from0_.value + datetime.timedelta(days=1)) hfrom -= 24 while hfrom < 0: from0_.value = (from0_.value + datetime.timedelta(days=-1)) hfrom += 24 from0_.value = ((from0_.value + datetime.timedelta(hours=hfrom)) + datetime.timedelta(minutes=min_from)) if (hto is not None or min_to is not None): if (hto is None): hto = now.hour if (min_to is None): min_to = 0 while min_to >= 60: hto += 1 min_to -= 60 while min_to < 0: hto -= 1 min_to += 60 while hto >= 24: to.value = (to.value + datetime.timedelta(days=1)) hto -= 24 while hto < 0: to.value = (to.value + datetime.timedelta(days=-1)) hto += 24 to.value = ((to.value + datetime.timedelta(hours=hto)) + datetime.timedelta(minutes=min_to)) return True