How can I make this lambda get a timestamp that doesn't include the T in the timestamp?
@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)
eg timestamp:
2015-04-11T01:30:00
                The datetime.isoformat() function takes an argument: the separator to use. It defaults to 'T' if omitted; if you want something else, then pass in that instead:
obj.isoformat(' ')
Quoting the documentation:
The optional argument sep (default
'T') is a one-character separator, placed between the date and time portions of the result.
You can also convert the object to a string here; datetime.__str__() is basically the same thing as datetime.isoformat(' ').
Demo:
>>> 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'
Only the datetime.isoformat() method takes that argument; date.isoformat() does not; you'll have to adjust your default handler to differentiate between date and datetime objects for this to work, or just use str() on either:
dthandler = lambda obj: (
                obj.isoformat(' ') if isinstance(obj, datetime.datetime)
                else obj.isoformat() if isinstance(obj, datetime.date)
                else None)
or
dthandler = lambda obj: (
                str(obj) if isinstance(obj, (datetime.datetime, datetime.date))
                else None)
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With