code: def str2datetime(self, datetimestr):
          
          try:
              return datetime.strptime(
                      datetimestr, self.default_datetime_templates)
          except: # 如果默认的模板不匹配, 则重新尝试所有的模板
              pass
          
          # try all datetime_templates
          # 对每个template进行尝试, 如果都不成功, 抛出异常
          for template in self.datetime_templates:
              try:
                  a_datetime = datetime.strptime(
                                  datetimestr, template) # 如果成功了
                  self.default_datetime_templates = template # 保存为default
                  return a_datetime
              except:
                  pass
          raise NoMatchingTemplateError(datetimestr)
docs: Try parse datetime from string. If None template matching this 
          datestr, raise Error.
           
          :param datetimestr: a string represent a datetime
          :type datetimestr: str
          :return: a datetime.datetime object
          
          Usage::
          
              >>> from weatherlab.lib.timelib.timewrapper import timewrapper
              >>> timewrapper.str2date("12/15/2014 06:30:00 PM")
              datetime.datetime(2014, 12, 15, 18, 30)
      
          **中文文档**
          
          尝试从字符串中解析出datetime.date对象。每次解析时, 先尝试默认模板, 如果
          失败了, 再重新对所有模板进行尝试; 一旦尝试成功, 这将当前成功的模板保存
          为默认模板。这样使得尝试的策略最优化。