point.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. from arrow import Arrow
  2. from .helpers.arrow_helper import arrow2grid
  3. from .result import DeltaType
  4. class TimePoint:
  5. """
  6. 时间表达式单元规范化对应的内部类,对应时间表达式规范化的每个字段。\n
  7. 六个字段分别是:年-月-日-时-分-秒 \n
  8. 每个字段初始化为-1
  9. """
  10. def __init__(self):
  11. # 0年 1月 2日 3时 4分 5秒
  12. self.tunit = [-1, -1, -1, -1, -1, -1]
  13. def copy(self) -> "TimePoint":
  14. new_instance = TimePoint()
  15. new_instance.tunit = self.tunit.copy()
  16. return new_instance
  17. @property
  18. def year(self) -> int:
  19. return self.tunit[0]
  20. @year.setter
  21. def year(self, value: int):
  22. self.tunit[0] = value
  23. @property
  24. def month(self) -> int:
  25. return self.tunit[1]
  26. @month.setter
  27. def month(self, value: int):
  28. self.tunit[1] = value
  29. @property
  30. def day(self) -> int:
  31. return self.tunit[2]
  32. @day.setter
  33. def day(self, value: int):
  34. self.tunit[2] = value
  35. @property
  36. def hour(self) -> int:
  37. return self.tunit[3]
  38. @hour.setter
  39. def hour(self, value: int):
  40. self.tunit[3] = value
  41. @property
  42. def minute(self) -> int:
  43. return self.tunit[4]
  44. @minute.setter
  45. def minute(self, value: int):
  46. self.tunit[4] = value
  47. @property
  48. def second(self) -> int:
  49. return self.tunit[5]
  50. @second.setter
  51. def second(self, value: int):
  52. self.tunit[5] = value
  53. def is_valid(self):
  54. flag = 0
  55. for i in self.tunit:
  56. if i > 0:
  57. flag = 1
  58. return True
  59. if flag == 0:
  60. return False
  61. def gen_delta(self) -> DeltaType:
  62. return {
  63. "year": max(self.year, 0),
  64. "month": max(self.month, 0),
  65. "day": max(self.day, 0),
  66. "hour": max(self.hour, 0),
  67. "minute": max(self.minute, 0),
  68. "second": max(self.second, 0),
  69. }
  70. def get_arrow(self) -> Arrow:
  71. year = max(self.year, 1)
  72. month = max(self.month, 1)
  73. day = max(self.day, 1)
  74. hour = max(self.hour, 0)
  75. minute = max(self.minute, 0)
  76. second = max(self.second, 0)
  77. return Arrow(year, month, day, hour, minute, second)
  78. def set_unit(self, arrow: Arrow):
  79. self.tunit = list(map(int, arrow2grid(arrow)))
  80. def __repr__(self) -> str:
  81. return str(self.tunit)