Python ISO datetime包含' T'字符

时间:2015-04-11 12:51:30

标签: python json datetime

如何让这个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

1 个答案:

答案 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处理程序以区分datedatetime个对象才能使其生效,或者只使用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)