NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

timedelta.py (1498B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\datetimeutils\parsers\timedelta.py
      2 import datetime
      3 import re
      4 _string_types = tuple({type(u''), type('')})
      5 _PERIOD_PART = re.compile('([+-]?(?:\\d+(?:\\.(?:\\d+)?)?|\\.\\d+))\\s*([a-z]+)\\s*', re.IGNORECASE)
      6 _KEYWORDS = {'d': 'days',
      7  'day': 'days',
      8  'days': 'days',
      9  'h': 'hours',
     10  'hr': 'hours',
     11  'hrs': 'hours',
     12  'hour': 'hours',
     13  'hours': 'hours',
     14  'm': 'minutes',
     15  'i': 'minutes',
     16  'min': 'minutes',
     17  'mins': 'minutes',
     18  'minute': 'minutes',
     19  'minutes': 'minutes',
     20  's': 'seconds',
     21  'sec': 'seconds',
     22  'secs': 'seconds',
     23  'second': 'seconds',
     24  'seconds': 'seconds',
     25  'w': 'weeks',
     26  'wk': 'weeks',
     27  'wks': 'weeks',
     28  'week': 'weeks',
     29  'weeks': 'weeks'}
     30 
     31 def _parse_split(string):
     32     if string and isinstance(string, _string_types):
     33         buf = []
     34         string = string.strip().lower()
     35         for match in _PERIOD_PART.finditer(string):
     36             buf.append(match.groups())
     37 
     38         return buf or None
     39 
     40 
     41 def _timedelta_keywords(list_of_lists):
     42     kw_map = {}
     43     for num, kw in list_of_lists:
     44         kw_map[_KEYWORDS[kw]] = float(num)
     45 
     46     return kw_map
     47 
     48 
     49 def str_to_timedelta(string, default = 0):
     50     if default == 0:
     51         default = datetime.timedelta(seconds=0)
     52     res = _parse_split(string)
     53     if res:
     54         try:
     55             return datetime.timedelta(**_timedelta_keywords(res))
     56         except (ValueError, KeyError, IndexError):
     57             return default
     58 
     59     else:
     60         return default