Swift version: 5.10
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
GO FURTHER, FASTER Unleash your full potential as a Swift developer with the all-new Swift Career Accelerator: the most comprehensive, career-transforming learning resource ever created for iOS development. Whether you’re just starting out, looking to land your first job, or aiming to become a lead developer, this program offers everything you need to level up – from mastering Swift’s latest features to conquering interview questions and building robust portfolios.
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.