Generally there are several ways to serialize datetimes, like:
- ISO 8601 string, short and can include timezone info, e.g., jgbarah's answer
- Timestamp (timezone data is lost), e.g. JayTaylor's answer
- Dictionary of properties (including timezone).
If you're okay with the last way, the json_tricks package handles dates, times and datetimes including timezones.
from datetime import datetimefrom json_tricks import dumpsfoo = {'title': 'String', 'datetime': datetime(2012, 8, 8, 21, 46, 24, 862000)}dumps(foo)
which gives:
{"title": "String", "datetime": {"__datetime__": null, "year": 2012, "month": 8, "day": 8, "hour": 21, "minute": 46, "second": 24, "microsecond": 862000}}
So all you need to do is
`pip install json_tricks`
and then import from json_tricks
instead of json
.
The advantage of not storing it as a single string, int or float comes when decoding: if you encounter just a string or especially int or float, you need to know something about the data to know if it's a datetime. As a dict, you can store metadata so it can be decoded automatically, which is what json_tricks
does for you. It's also easily editable for humans.
Disclaimer: it's made by me. Because I had the same problem.