11from  datetime  import  datetime 
2- from  functools  import  lru_cache 
32from  typing  import  Any 
43
5- from  dateutil  import  relativedelta    # type: ignore 
4+ from  dateutil  import  relativedelta 
65
76# 定义不同时间格式的格式化字符串 
87TIME_FORMATS  =  {
@@ -145,38 +144,6 @@ def _adjust_time(self, delta_input: Any, positive: bool = True) -> str:
145144            case  _:
146145                return  "时间增量输入类型无效" 
147146
148-     @lru_cache (maxsize = 64 ) 
149-     def  _format_time_difference (self , seconds : float , is_past : bool ) ->  str :
150-         """格式化时间差异为人性化字符串 
151- 
152-         Args: 
153-             seconds: 时间差异(秒) 
154-             is_past: 是否是过去时间 
155- 
156-         Returns: 
157-             人性化的时间差异描述 
158-         """ 
159-         suffix  =  "前"  if  is_past  else  "后" 
160-         seconds  =  abs (seconds )
161- 
162-         if  seconds  <  60 :
163-             return  "刚刚" 
164-         elif  seconds  <  3600 :  # 1小时内 
165-             minutes  =  int (seconds  /  60 )
166-             return  f"{ minutes }  分钟{ suffix }  " 
167-         elif  seconds  <  86400 :  # 24小时内 
168-             hours  =  int (seconds  /  3600 )
169-             return  f"{ hours }  小时{ suffix }  " 
170-         elif  seconds  <  2592000 :  # 约30天内 
171-             days  =  int (seconds  /  86400 )
172-             return  f"{ days }  天{ suffix }  " 
173-         elif  seconds  <  31536000 :  # 1年内 
174-             months  =  int (seconds  /  2592000 )
175-             return  f"{ months }  个月{ suffix }  " 
176-         else :
177-             years  =  int (seconds  /  31536000 )
178-             return  f"{ years }  年{ suffix }  " 
179- 
180147    def  _get_idle_duration (self , times : dict [str , datetime ]) ->  str :
181148        """计算并返回人性化的空闲时间字符串 
182149
@@ -192,6 +159,29 @@ def _get_idle_duration(self, times: dict[str, datetime]) -> str:
192159
193160        # 确定是过去还是未来 
194161        is_past  =  idle_seconds  >  0 
162+         suffix  =  "前"  if  is_past  else  "后" 
163+ 
164+         idle_seconds  =  abs (idle_seconds )
195165
196-         # 使用可缓存的辅助方法来格式化时间差异 
197-         return  self ._format_time_difference (idle_seconds , is_past )
166+         if  is_past :
167+             delta  =  relativedelta .relativedelta (times ["before" ], times ["after" ])
168+         else :
169+             delta  =  relativedelta .relativedelta (times ["after" ], times ["before" ])
170+ 
171+         if  idle_seconds  <  60 :
172+             return  "刚刚" 
173+         elif  idle_seconds  <  3600 :  # 1小时内 
174+             minutes  =  delta .minutes 
175+             return  f"{ minutes }  分钟{ suffix }  " 
176+         elif  idle_seconds  <  86400 :  # 24小时内 
177+             hours  =  delta .hours 
178+             return  f"{ hours }  小时{ suffix }  " 
179+         elif  idle_seconds  <  2592000 :  # 约30天内 
180+             days  =  delta .days 
181+             return  f"{ days }  天{ suffix }  " 
182+         elif  idle_seconds  <  31536000 :  # 1年内 
183+             months  =  delta .months  +  delta .years  *  12 
184+             return  f"{ months }  个月{ suffix }  " 
185+         else :
186+             years  =  delta .years 
187+             return  f"{ years }  年{ suffix }  " 
0 commit comments