首页 > 解决方案 > python将日期列表作为字符串转换为日期列表

问题描述

我有一个作为字符串导入的日期列表。我尝试了很多不同的方法将其转换为日期列表。不管我怎么做,我都会出错。

#import valid dates from map file as list
valdts = dfmap.loc[row, 'valdata'].split(', ')
print(valdts)
>>
['1/1/1990', '6/6/1990', '7/4/1776']

#convert strings to dates
attempt1:
valdts = [d.strftime('%Y-%m-%d') for d in valdts]
>>
AttributeError: 'str' object has no attribute 'strftime'

attempt2:
a = [date_obj.strftime('%Y%m%d') for date_obj in valdts]
>>
AttributeError: 'str' object has no attribute 'strftime'

attempt3:
a = datetime.strptime(valdts, '%d %b %Y')
>>
TypeError: strptime() argument 1 must be str, not list

attempt4:
a = valdts.sort(key = lambda dt: datetime.strptime(dt, '%d %m %Y'))
>>
ValueError: time data '1/1/1990' does not match format '%d %m %Y'

attempt5:
for dt in valdts:
    dt = dt.replace('/',',')
    print(dt)
    c = datetime.strptime('.'.join(str(i) for i in dt).zfill(8), "%Y.%m.%d")
>>
'1,1,1990'
ValueError: time data '1.,.1.,.1.9.9.0' does not match format '%Y.%m.%d'

attempt6:
for dt in valdts:
    dt = dt.replace('/',',')
    datetime.strptime(dt, '%d %m %Y')
>>
ValueError: time data '1,1,1990' does not match format '%d %m %Y'

我越来越沮丧。上述不同的方法是基于对其他人发布的类似但不完全相同的问题的回答。与我最相似的问题已被否决。我是在尝试做一些愚蠢的事情吗?非常感谢这里的一些帮助。谢谢。

注意: datetime.datetime 给我一个错误。AttributeError: type object 'datetime.datetime' 没有属性 'datetime'但只有 datetime 适用于我的代码的其他部分。

标签: datetimepython-3.7

解决方案


这是我最终想出的解决方法。但是会欢迎一种不需要拆分每个日期的更好方法。

valdts = dfmap.loc[row, 'valdata'].split(', ')
print(valdts)
>>
['1/1/1990', '6/6/1990', '7/4/1776']

for dt in valdts:
    ldt = dt.split('/')
    valdt = datetime(int(ldt[2]), int(ldt[1]), int(ldt[0]))
    ldates.append(valdt)
print(ldt)
>>

注意1:由于我导入日期时间的方式,datetime.datetime 对我不起作用。在此处查看出色的解释。

注意 2:将单个数字转换为 int 至关重要。没有其他东西对我有用。感谢@waitingkuo 在上面的同一链接中提供的解决方案。


推荐阅读