繁体   English   中英

python我的日期转换功能在将datetime.date格式转换为“ yyyy-mm-dd”时引发错误

[英]python my date conversion function is throwing error while converting the datetime.date format to “yyyy-mm-dd”

我有以下格式的日期列表:

# List of dates
List_of_Dates = [datetime.date(2019, 6, 3), datetime.date(2019, 6, 4), datetime.date(2019, 6, 5), datetime.date(2019, 6, 6), datetime.date(2019, 6, 7), datetime.date(2019, 6, 10), datetime.date(2019, 6, 11), datetime.date(2019, 6, 12)]

然后我定义了一个用于日期转换的函数:

# define a function for date conversion
def Date_Converter(Date):
    import datetime
    Date2 = datetime.datetime.strptime(Date,"%Y-%m-%d").date()
    return(Date2)

但是,当我通过以下方式将上述日期列表传递给上述函数时:

# return the list of converted dates
Date_Converter(List_of_Dates)

我也尝试过:

[Date_Converter(x) for x in List_of_Dates]

但是在两种情况下,我都出错了:

 ----> 5     Date2 = datetime.datetime.strptime(Date,"%Y-%m-%d").date()
  6     return(Date2)

 TypeError: strptime() argument 1 must be str, not list

而我期望以下列表:

["2019-06-03", "2019-06-04", "2019-06-05", "2019-06-06", "2019-06-07", "2019-06-10", "2019-06-11", "2019-06-12"]

您的代码有很多问题,让我们一一解决。

进口

任一import datetimefrom datetime import date一个模块内。 选择一个并坚持下去,否则会引起混乱。

创建一个新日期

datetime.date(2019, 6, 3)错误,请改用datetime(2019, 6, 3)

更新:我假设您使用的是datetime.datetime.date(),它不能工作,但是datetime.date.date()可以工作。 同样,使用有意义的导入可以防止这种情况。

尝试解析日期时间对象

而不是strptime (用于将字符串解析 datetime),而是要使用strftime (从datetime转换为string)。

具有一个期望单个变量的函数,并向其传递变量列表

显然无法工作。 除非您以可以处理单个变量和列表的方式编写函数。


这是固定代码:

from datetime import date

List_of_Dates = [date(2019, 6, 3), date(2019, 6, 4), date(2019, 6, 5)]

def Date_Converter(Date):
    return date.strftime(Date,"%Y-%m-%d")

new_list = [Date_Converter(d) for d in List_of_Dates]

print(new_list)

输出:

['2019-06-03', '2019-06-04', '2019-06-05']

使用strftime而不是strptime

    import datetime
lis = []
List_of_Dates = [datetime.date(2019, 6, 3), datetime.date(2019, 6, 4), 
                datetime.date(2019, 6, 5), datetime.date(2019, 6, 6), 
                datetime.date(2019, 6, 7), datetime.date(2019, 6, 10), 
                datetime.date(2019, 6, 11), datetime.date(2019, 6, 12)]
for i in List_of_Dates:
    date1 = datetime.datetime.strftime(i,'%Y-%m-%d')
    lis.append(date1)
print lis

输出-

['2019-06-03', '2019-06-04', '2019-06-05', '2019-06-06', '2019-06-07', '2019-06-10', '2019-06-11', '2019-06-12']

使用lambda函数,您可以这样:

date_Converter = lambda date: [str(date[i]) for i in range(len(date))]

这将返回:

date_Converter(List_of_Dates)

['2019-06-03',
 '2019-06-04',
 '2019-06-05',
 '2019-06-06',
 '2019-06-07',
 '2019-06-10',
 '2019-06-11',
 '2019-06-12']

此处代码已更正:

def Date_Converter(Date):
return  dt.datetime.strptime(Date,"%Y-%m-%d").date()

output = [Date_Converter(List_of_Dates[a]) for a in 
range(len(List_of_Dates))]

输出是日期列表:

['2019-06-03',
 '2019-06-04',
 '2019-06-05',
 '2019-06-06',
 '2019-06-07',
 '2019-06-10',
 '2019-06-11',
 '2019-06-12']

问题是您将一个列表传递给该函数,并且它期望一个日期。

您可以通过以下方式解决此问题:

import Datetime

result = []

for date in List_of_Dates:
    result.append(Date_Converter(date))

另一种Python方式是使用流行的map 这样:会将列表传递到函数中。

import datetime 
# List of dates
List_of_Dates = [datetime.date(2019, 6, 3), datetime.date(2019, 6, 4), datetime.date(2019, 6, 5), datetime.date(2019, 6, 6), datetime.date(2019, 6, 7), datetime.date(2019, 6, 10), datetime.date(2019, 6, 11), datetime.date(2019, 6, 12)]
# define a function for date conversion
def Date_Converter(Date):    
    Date2 = datetime.datetime.strptime(str(Date),"%Y-%m-%d")
    return(str(Date2.date()))



map(Date_Converter,List_of_Dates) 

结果:

    ['2019-06-03',
 '2019-06-04',
 '2019-06-05',
 '2019-06-06',
 '2019-06-07',
 '2019-06-10',
 '2019-06-11',
 '2019-06-12'] 
# return the list of converted dates
Date_Converter(List_of_Dates)

这与返回值无关。 同样,您的名字几乎可以解决您的问题-您通过列表而不是单个日期。

此行的解决方法是:

list_of_converted_dates = [Date_Converter(date) for date in List_of_Dates]

这将从您的列表中收集每个日期的结果。

但是,此后您将遇到另一个问题: TypeError: strptime() argument 1 must be str, not datetime.datetime

此错误源于您尝试转换日期的方式- datetime.datetime.strptime(Date,"%Y-%m-%d").date()datetime.datetime.strptime(Date,"%Y-%m-%d").date()尝试从日期中获取日期串

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM