示例#1
0
 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
示例#2
0
 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