
    Kh                     p    S r SSKJrJrJr  SSKJr  \" \" SS95      r " S S5      rS rSS	 jr	S
 r
S rg)uJ   
时间工具模块
统一处理系统时间，使用北京时间 (UTC+8)
    )datetimetimezone	timedelta)current_app   hoursc                       \ rS rSrSr\S 5       r\S 5       r\S 5       r\S 5       r	\S 5       r
\S 5       r\SS	 j5       r\S
 5       r\SS j5       r\SS j5       r\SS j5       r\S 5       r\S 5       rSrg)	TimeUtils   u   时间处理工具类c                      [         $ )u   获取北京时区对象)BEIJING_TIMEZONE     <   /Users/yu22x/Desktop/ddd_副本5/ctf/app/utils/time_utils.pyget_beijing_timezoneTimeUtils.get_beijing_timezone   s
      r   c                  6    [         R                  " [        5      $ u   获取当前北京时间r   nowr   r   r   r   r   TimeUtils.now        ||,--r   c                  ,    [         R                  " 5       $ )uI   
获取当前UTC时间
兼容原有代码，但建议使用 now() 方法
)r   utcnowr   r   r   r   TimeUtils.utcnow   s       r   c                  6    [         R                  " [        5      $ )u*   获取当前北京时间（明确命名）r   r   r   r   beijing_nowTimeUtils.beijing_now!   r   r   c                     U c  gU R                   c  U R                  [        R                  S9n U R	                  [
        5      $ )u   
将UTC时间转换为北京时间

Args:
    utc_dt: UTC时间的datetime对象
    
Returns:
    北京时间的datetime对象
Ntzinfo)r"   replacer   utc
astimezoner   utc_dts    r   utc_to_beijingTimeUtils.utc_to_beijing&   s@     > == ^^8<<^8F   !122r   c                     U c  gU R                   c  U R                  [        S9n U R                  [        R
                  5      $ )u   
将北京时间转换为UTC时间

Args:
    beijing_dt: 北京时间的datetime对象
    
Returns:
    UTC时间的datetime对象
Nr!   )r"   r#   r   r%   r   r$   )
beijing_dts    r   beijing_to_utcTimeUtils.beijing_to_utc;   sF      $#++3C+DJ $$X\\22r   c                     U c  gU R                   b  U R                   [        R                  :X  a  [        R	                  U 5      n U R                  U5      $ )u   
格式化日期时间

Args:
    dt: datetime对象
    format_str: 格式字符串
    
Returns:
    格式化后的时间字符串
   未知时间)r"   r   r$   r   r(   strftimedt
format_strs     r   format_datetimeTimeUtils.format_datetimeP   sF     :! 99		X\\ 9))"-B{{:&&r   c                    U c  g[         R                  5       nU R                  c  [         R                  U 5      n X-
  nUR                  S:  a  UR                  S:X  a  gUR                  S:  a  UR                   S3$ UR                  S:  a  UR                  S-  nU S3$ UR                  S	:  a  UR                  S-  nU S
3$ UR                  S	-  nU S3$ UR
                  nUS:  a  gUS:  a
  US-  nU S3$ US-  nU S3$ )u}   
格式化相对时间（如：2小时前、3天前）

Args:
    dt: datetime对象
    
Returns:
    相对时间字符串
r/   r      u   1天前   u   天前   u   周前im  u	   个月前u   年前<   u   刚刚i  u	   分钟前u	   小时前)r   r   r"   r(   daysseconds)	r2   r   diffweeksmonthsyearsr<   minutesr	   s	            r   format_relative_timeTimeUtils.format_relative_timee   s    :! mmo99))"-Bx99q=yyA~ Q))F++R		Q''Sb ++		S(''llG|4!R-!),,4	**r   c                      [         R                  " X5      nUR                  [        S9$ ! [        [
        4 a     gf = f)u   
解析日期时间字符串

Args:
    date_string: 日期时间字符串
    format_str: 格式字符串
    
Returns:
    datetime对象（北京时间）
r!   N)r   strptimer#   r   
ValueError	TypeError)date_stringr3   r2   s      r   parse_datetimeTimeUtils.parse_datetime   s@    	"";;B::%5:66I& 		s   (+ >>Nc                     U c  [         R                  5       n O"U R                  c  [         R                  U 5      n U R	                  SSSSS9$ )u   
获取某天的开始时间（00:00:00）

Args:
    dt: 指定日期，如果为None则使用当前日期
    
Returns:
    当天开始时间的datetime对象
r   hourminutesecondmicrosecondr   r   r"   r(   r#   r2   s    r   get_start_of_dayTimeUtils.get_start_of_day   sE     :BYY))"-Bzzq1!zDDr   c                     U c  [         R                  5       n O"U R                  c  [         R                  U 5      n U R	                  SSSSS9$ )u   
获取某天的结束时间（23:59:59）

Args:
    dt: 指定日期，如果为None则使用当前日期
    
Returns:
    当天结束时间的datetime对象
   ;   i?B rL   rQ   rR   s    r   get_end_of_dayTimeUtils.get_end_of_day   sE     :BYY))"-Bzzr"RVzLLr   c                     U c  [         R                  5       n O"U R                  c  [         R                  U 5      n U [	        US9-   $ )u   
在指定日期基础上增加天数

Args:
    dt: 基础日期
    days: 要增加的天数
    
Returns:
    新的datetime对象
)r;   r   r   r"   r(   r   )r2   r;   s     r   add_daysTimeUtils.add_days   s>     :BYY))"-BI4(((r   c                     U c  [         R                  5       n O"U R                  c  [         R                  U 5      n U [	        US9-   $ )u   
在指定日期基础上增加小时数

Args:
    dt: 基础日期
    hours: 要增加的小时数
    
Returns:
    新的datetime对象
r   r[   )r2   r	   s     r   	add_hoursTimeUtils.add_hours   s>     :BYY))"-BIE***r   r   z%Y-%m-%d %H:%M:%S)N)__name__
__module____qualname____firstlineno____doc__staticmethodr   r   r   r   r(   r,   r4   rB   rI   rS   rX   r\   r_   __static_attributes__r   r   r   r   r      s       . . ! ! . . 3 3( 3 3( ' '( ++ ++Z  $ E E" M M" ) )$ + +r   r   c                  *    [         R                  5       $ r   )r   r   r   r   r   r   r      s    ==?r   c                 ,    [         R                  X5      $ )u   格式化日期时间)r   r4   r1   s     r   r4   r4      s    $$R44r   c                 ,    [         R                  U 5      $ )u   格式化相对时间)r   rB   rR   s    r   rB   rB      s    ))"--r   c                 ,    [         R                  U 5      $ )u   UTC时间转北京时间)r   r(   r&   s    r   r(   r(      s    ##F++r   Nra   )rf   r   r   r   flaskr   r   r   r   r4   rB   r(   r   r   r   <module>rn      sH   
 3 2  IA./ b+ b+L5.,r   