如何让这个lambda获得时间戳并不包含时间戳中的T
?
@app.route("/bookings", methods=['GET'])
def bookings():
bookings = Booking.query.all()
dictList = []
for b in bookings:
dictList.append(b.as_dict())
dthandler = lambda obj: (
obj.isoformat()
if isinstance(obj, datetime.datetime)
or isinstance(obj, datetime.date)
else None)
return json.dumps(dictList, default=dthandler)
例如时间戳:
2015-04-11T01:30:00
答案 0 :(得分:6)
datetime.isoformat()
function接受一个参数:要使用的分隔符。如果省略,则默认为'T'
;如果你想要别的东西,那就改为:
obj.isoformat(' ')
引用文档:
可选参数 sep (默认
'T'
)是一个单字符分隔符,位于结果的日期和时间部分之间。
您也可以在此处将对象转换为字符串; datetime.__str__()
与datetime.isoformat(' ')
基本相同。
演示:
>>> from datetime import datetime
>>> obj = datetime(2015, 4, 21, 20, 0, 0)
>>> obj.isoformat()
'2015-04-21T20:00:00'
>>> obj.isoformat(' ')
'2015-04-21 20:00:00'
只有datetime.isoformat()
方法接受该参数; date.isoformat()
没有;您必须调整default
处理程序以区分date
和datetime
个对象才能使其生效,或者只使用str()
:
dthandler = lambda obj: (
obj.isoformat(' ') if isinstance(obj, datetime.datetime)
else obj.isoformat() if isinstance(obj, datetime.date)
else None)
或
dthandler = lambda obj: (
str(obj) if isinstance(obj, (datetime.datetime, datetime.date))
else None)