code: def _str2datetime(self, datetime_str):
          
          # try default datetime template
          try:
              a_datetime = datetime.strptime(
                  datetime_str, self._default_datetime_template)
              return a_datetime
          except:
              pass
  
          # try every datetime templates
          for template in datetime_template_list:
              try:
                  a_datetime = datetime.strptime(datetime_str, template)
                  self._default_datetime_template = template
                  return a_datetime
              except:
                  pass
  
          # raise error
          a_datetime = parse(datetime_str)
          self.str2datetime = parse
  
          return a_datetime
docs: Parse datetime from string.
  
          If there's no template matches your string, Please go
          https://github.com/MacHu-GWU/rolex-project/issues
          submit your datetime string. I 'll update templates ASAP.
  
          This method is faster than :meth:`dateutil.parser.parse`.
  
          :param datetime_str: a string represent a datetime
          :type datetime_str: str
          :return: a datetime object
  
          **中文文档**
  
          从string解析datetime。首先尝试默认模板, 如果失败了, 则尝试所有的模板。
          一旦尝试成功, 就将当前成功的模板保存为默认模板。这样做在当你待解析的
          字符串非常多, 且模式单一时, 只有第一次尝试耗时较多, 之后就非常快了。
          该方法要快过 :meth:`dateutil.parser.parse` 方法。
  
          为了防止模板库失败的情况, 程序设定在失败后自动一直启用
          :meth:`dateutil.parser.parse` 进行解析。你可以调用 :meth:`Parser.reset()`
          方法恢复默认设定。