Swift version: 5.0
Encoding and decoding dates using the
Codable protocol isn’t hard to do, but it does produce some unexpected data by default:
Date stores its information as a floating-point number counting the number of seconds since January 1st 2001, rather than something standard involved days, months, and years.
ISO-8601 is the web’s standard way of referring to dates and times, and looks like this: 2018-12-25T17:30:00Z – in English that’s December 25th 2018, at 5:30pm UTC. Both
JSONDecoder are able to use this date format rather than the floating-point default – all you have to do is set their
If you’re decoding dates, use this:
let decoder = JSONDecoder() decoder.dateDecodingStrategy = .iso8601
And if you’re encoding dates you should use this:
let encoder = JSONEncoder() encoder.dateEncodingStrategy = .iso8601
Available from iOS 8.0
This is part of the Swift Knowledge Base, a free, searchable collection of solutions for common iOS questions.