o
    +keX                     @   s   d dl Z d dlZd dlmZmZ ddlmZmZ dd Zdd Zej	fd	d
Z
dd ZdZer6dZed ZndZed Zdd Zdd Zdd Zd!defddZdefddZdd ZG dd  d ZdS )"    N)datetimetimezone   )
ISO_FORMATISO_FORMAT_NO_USECSc              
   C   s,   t t| t dddtjd  dd  S )z3Convert datetime object from UTC to local time zonei     tzinfoN   )r   time	localtimer   utctotal_secondsts r   5usr/lib/python3.10/site-packages/borg/helpers/time.pyto_localtime   s   ,r   c                   C   s   t tjjddS )zKReturns a naive datetime instance representing the time in the UTC timezoneNr   )r   nowr   r   replacer   r   r   r   utcnow   s   r   c                 C   s4   d| v rt nt}t| |}|dur|j|d}|S )z!Parse a ISO 8601 timestamp string.Nr   )r   r   r   strptimer   )	timestampr	   fmtdtr   r   r   parse_timestamp   s
   r   c                 C   sr   zt t| j}tj|tjdW S  ty8   dD ]}zt	| |j
tjdW    Y S  ty5   Y qw tw )z5Convert a --timestamp=s argument to a datetime object)tz)z%Y-%m-%dT%H:%M:%SZz%Y-%m-%dT%H:%M:%S+00:00z%Y-%m-%dT%H:%M:%Sz%Y-%m-%d %H:%M:%Sz%Y-%m-%dT%H:%Mz%Y-%m-%d %H:%Mz%Y-%m-%dz%Y-%jr   )safe_sosstatst_mtimer   fromtimestampr   r   OSErrorr   r   
ValueError)sr   formatr   r   r   r      s    r   Ti\i ʚ;l    (TZ c                 C   (   d|   krt kr| S  | dk rdS t S Nr   )MAX_Sr   r   r   r   r   J      r   c                 C   r'   r(   )MAX_NSr   r   r   r   safe_nsS   r*   r,   c                 C   s   t | }t|d S )Ng    eA)r,   r   r"   )Zitem_timestamp_nsZt_nsr   r   r   safe_timestamp\   s   r-    r   c                 C   s   |  |dkr	dS |S )zG
    Convert *ts* to a human-friendly format with textual weekday.
    r.   z%a, %Y-%m-%d %H:%M:%S)strftime)r   format_specr   r   r   format_timea   s   r1   c                 C   s
   |  tS )z,
    Format *ts* according to ISO 8601.
    )r/   r   r   r   r   r   isoformat_timeh   s   
r2   c                 C   sp   |   }|d }t|d d }t|d d }d| }|r$d||f }|r,d||f }| jr6d| j|f }|S )z0Format timedelta in a human friendly format
    <   i     z%.2f secondsz%d minutes %sz%d hours %sz
%d days %s)r   intdays)tdr   r%   mhtxtr   r   r   format_timedeltap   s   r;   c                   @   s6   e Zd ZdefddZdd Zdd Zdd	 ZeZd
S )OutputTimestampr   c                 C   s   |j tjkr
t|}|| _d S N)r	   r   r   r   r   )selfr   r   r   r   __init__   s   
zOutputTimestamp.__init__c                 C   s   t | j|dS )N)r0   )r1   r   )r>   r0   r   r   r   
__format__   s   zOutputTimestamp.__format__c                 C   s   |  S r=   r   r>   r   r   r   __str__   s   zOutputTimestamp.__str__c                 C   s
   t | jS r=   )r2   r   rA   r   r   r   	isoformat   s   
zOutputTimestamp.isoformatN)	__name__
__module____qualname__r   r?   r@   rB   rC   Zto_jsonr   r   r   r   r<      s    r<   )r.   )r   r   r   r   	constantsr   r   r   r   r   r   r   ZSUPPORT_32BIT_PLATFORMSr)   r+   r   r,   r-   r1   r2   r;   r<   r   r   r   r   <module>   s*    	
		