Swift version: 5.2
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
SPONSORED Are you tired of wasting time debugging your Swift app? Instabug’s SDK is here to help you minimize debugging time by providing you with complete device details, network logs, and reproduction steps with every bug report. All data is attached automatically, and it only takes a line of code to setup. Start your free trial now and get 3 months off exclusively for the Hacking with Swift Community.
Available from iOS 8.0
This is part of the Swift Knowledge Base, a free, searchable collection of solutions for common iOS questions.
Link copied to your pasteboard.