![](/img/trans.png)
[英]Keep a datetime.date in 'yyyy-mm-dd' format when using Flask's jsonify
[英]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 datetime
或from 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.