错误释义:主要错误是, datetime对象的strftime方法,主要是用于将日期对象转为为日期字符串。其次strftime只能处理一个对象,而不是一个对象列表,也就是这个对象列表中的一个元素。
date_obj.strftime 是应用于日期对象的一个方法,你想将日期对象转为类似日期字符串你可以使用它。
如果你想将它应用到日期对象的列表 ,你需要遍历列表并对每个日期对象单独调用 strftime
例如:
日期字符串对象列表: date_str_list = ['2023-12-25','2024-04-30'] 日期字符串对象: date_str = '2023-12-25' 日期对象列表:date_obj_list = [datetime.datetime(2024, 4, 30, 0, 0), datetime.datetime(2024, 5, 1, 0, 0), datetime.datetime(2024, 5, 2, 0, 0)] 日期对象: date_obj = datetime(2022, 1, 1)from datetime import datetime datetime(2022, 1, 1 ) 生成 日期对象
遍历,我使用了列表推导式,列表推导式也是一种遍历只是写法比较简单,目的就是装起来,毕竟看起来比较高级
列表推导式:
[date_obj.strftime('%Y-%m-%d') for date_obj in date_obj_list]
[datetime.strptime(date_str, '%Y-%m-%d') for date_str in date_str_list]
关键点是: [a for date_str in date_str_list],其中a可以代表 datetime.strptime()
或 date_obj.strftime()方法, 这两个只是对其遍历来的date_obj 和 date_str 做处理
案例:
from datetime import datetime, timedelta
# 创建一个日期对象列表
date_obj_list = [datetime(2022, 1, 1), datetime(2022, 1, 2), datetime(2022, 1, 3)]
# 使用strftime将每个日期对象转换为字符串
date_str_list = [date_obj.strftime('%Y-%m-%d') for date_obj in date_obj_list]
print(date_str_list)
strptime 是应用于日期字符串对象
方法,如果你想将一个日期字符串转换为日期对象,你可以使用它
当然它和 strftime
一样也可以应用到日期字符串对象列表中例如:
from datetime import datetime #日期字符串 date_str = '2023-12-25' # 日期字符串列表 date_str_list = ['2023-12-25','2024-04-30'] # 转换为日期对象列表 # 这里用了 列表推导式:# 解释: datetime.strptime() 用来处理日期字符串的方法,date_str 需要被处理的日期对象, # '%Y-%m-%d' 是类似日期的字符串对象被处理后生成日期对象格式 ,date_str 被处理的字符串数据从哪里来呢? # 从使用 for 循环遍历类似日期的字符串对象中来date_str_list,中来,我们对它做了遍历,它其中的每一个元素,就是一个日期字符串 # 也就是我前面说的 类似日期的字符串# 将日期字符串转为日期对象
date_obj= datetime.strptime(date_str, '%Y-%m-%d')
# 将日期字符串列表转为日期对象列表 date_obj_list = [datetime.strptime(date_str, '%Y-%m-%d') for date_str in date_str_list] print(date_obj) # 打印日期对象 print(date_obj_list) # 打印日期对象列表 print(type(date_obj_list[0])) # 查看 日期对象列表存储了什么类型数据
报错: 1.TypeError: descriptor 'strftime' for 'datetime.date' objects dsn't apply to a 'str' object
2.TypeError: strptime() argument 1 must be str, not datetime.datetime
3. TypeError: strptime() argument 1 must be str, not list
我前面讲了: datetime对象对于 日期字符串和日期对象的处理分别有两个方法分别是:
# 创建一个日期对象列表
date_obj_list = [datetime(2022, 1, 1), datetime(2022, 1, 2), datetime(2022, 1, 3)]
date_obj.strftime() # 处理日期对象
# datetime 是 Python 中的一个内置模块,用于处理日期和时间
datetime.strptime() # 处理字符串对象
第一你不要把他们处理对象搞反,第二处理各自对应的列表是要对里列表进行遍历
感谢各位同僚的支持:
小马又送大家几句名言:
矜孤恤寡,敬老怜贫。举善荐贤,饶人责己。 - 文昌帝君阴骘文