<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _str2datetime(self, datetime_str):
 """ 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()` 方法恢复默认设定。 """

        # 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