TypeError: descriptor ‘strftime‘ for ‘datetime.date‘ objects doesn‘t apply to a ‘str‘ object

  错误释义:主要错误是, 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)

 

TypeError: descriptor ‘strftime‘ for ‘datetime.date‘ objects doesn‘t apply to a ‘str‘ object_第1张图片

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]))  # 查看 日期对象列表存储了什么类型数据

TypeError: descriptor ‘strftime‘ for ‘datetime.date‘ objects doesn‘t apply to a ‘str‘ object_第2张图片 

报错: 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()   # 处理字符串对象

​第一你不要把他们处理对象搞反,第二处理各自对应的列表是要对里列表进行遍历


 感谢各位同僚的支持:

小马又送大家几句名言:

矜孤恤寡,敬老怜贫。举善荐贤,饶人责己。  - 文昌帝君阴骘文

你可能感兴趣的:(数据库)