Swift version: 5.6
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 JSONEncoder
and JSONDecoder
are able to use this date format rather than the floating-point default – all you have to do is set their dateEncodingStrategy
and dateDecodingStrategy
properties.
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
TAKE YOUR SKILLS TO THE NEXT LEVEL If you like Hacking with Swift, you'll love Hacking with Swift+ – it's my premium service where you can learn advanced Swift and SwiftUI, functional programming, algorithms, and more. Plus it comes with stacks of benefits, including monthly live streams, downloadable projects, a 20% discount on all books, and free gifts!
Sponsor Hacking with Swift and reach the world's largest 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.