Python datetime.strptime转字符串为日期结果异常原因咨询
问题根因
你贴出的代码存在三处明显错误,直接导致解析结果和预期不符:
datetime.strptime()的第一个参数仅支持传入单个日期字符串,不支持直接传入列表对象。你将整个date_str列表作为参数传入,方法本身不会自动遍历列表做批量解析,你现在得到的错乱日期值,并非对应输入字符串的解析结果。正常情况下这行代码会直接抛出TypeError: strptime() argument 1 must be str, not list报错,你能得到输出说明实际运行的代码和你贴出的版本可能存在偏差,大概率是循环解析时写错了传值逻辑。- 你提到最初设定的解析格式为
'%m/%d/%y',其中格式符%y仅匹配2位长度的年份(例如21对应2021),但你的输入日期里年份是4位长度(2021、2022),匹配4位年份必须使用大写的%Y格式符,用%y解析4位年份会触发格式匹配错误。 - 输出结果为
%Y-%m-%d %H:%M:%S格式不属于错误,这是Python中datetime对象的默认字符串表现形式——strptime的作用是将字符串转为datetime类型对象,直接打印对象时就会用这个默认格式展示。如果需要输出指定格式的日期字符串,需要在拿到datetime对象后调用strftime()方法做格式化。
正确写法
from datetime import datetime date_str_list = ['11/10/2021', '12/15/2021', '2/26/2022', '3/10/2021', '3/10/2021', '3/11/2021'] # 遍历列表逐个解析,4位年份对应%Y格式符 parsed_date_objs = [datetime.strptime(date_str, '%m/%d/%Y') for date_str in date_str_list] # 直接打印datetime对象(默认格式) for date_obj in parsed_date_objs: print(date_obj) # 如果需要输出为指定字符串格式,用strftime转换 # for date_obj in parsed_date_objs: # print(date_obj.strftime('%m/%d/%Y'))
运行输出
2021-11-10 00:00:00 2021-12-15 00:00:00 2022-02-26 00:00:00 2021-03-10 00:00:00 2021-03-10 00:00:00 2021-03-11 00:00:00
内容的提问来源于stack exchange,提问作者JIN
相关产品推荐
相关产品推荐

