Python datetime计算时间差报错TypeError解决求助
报错原因
你遇到的Type error : an integer is required (got type datetime.datetime)是以下几个问题叠加导致的:
- 核心触发点:
datetime.date()构造函数要求传入3个整数类型参数(分别为年、月、日),你直接把strptime()返回的datetime.datetime类型对象作为参数传入,参数类型完全不匹配,因此抛出类型错误。 - 字符串处理逻辑错误:
str.strip()的作用是移除字符串首尾处属于指定字符集的字符,不是删除指定子串,你用它来剥离T后面的时间部分完全达不到预期,再加上原字符串里的误换行,根本提取不到正确的%y-%m-%d格式日期片段。 - 其他语法问题:代码中
Print首字母大写,Python标准打印函数是小写print(),会触发名称错误;datetime.datetime.strptime被错误拆成两行书写,容易引发解析异常。
修正方法
不需要手动剥离时间字符串的时间部分,datetime.strptime本身支持直接解析带时区、时间的完整时间串,解析完成后调用datetime对象自带的.date()方法就能直接拿到对应日期对象,不需要手动调用datetime.date()构造。
修正后的可运行代码如下:
import datetime date_time_str = '22-06-24T05:31:06.000+00' # 直接解析完整的带时间、时区的字符串 date_time_obj = datetime.datetime.strptime(date_time_str, '%y-%m-%dT%H:%M:%S.%f%z') # 从解析后的datetime对象直接提取日期部分 sub_date = date_time_obj.date() today_date = datetime.date.today() time_diff = today_date - sub_date print(time_diff)
如果你坚持要先手动提取日期片段再解析,不要用strip(),改用split()按'T'分割字符串取第一段即可,解析后同样用.date()取日期对象:
import datetime date_time_str = '22-06-24T05:31:06.000+00' # 按T分割取前半段日期部分 date_part = date_time_str.split('T')[0] date_time_obj = datetime.datetime.strptime(date_part, '%y-%m-%d') sub_date = date_time_obj.date() today_date = datetime.date.today() time_diff = today_date - sub_date print(time_diff)
内容的提问来源于stack exchange,提问作者Chandrika Donepudi
相关产品推荐
相关产品推荐

