Xcode 9 • Swift 4 • iOS 11 or later
extension ISO8601DateFormatter { convenience init(_ formatOptions: Options, timeZone: TimeZone = TimeZone(secondsFromGMT: 0)!) { self.init() self.formatOptions = formatOptions self.timeZone = timeZone } }
extension Formatter { static let iso8601 = ISO8601DateFormatter([.withInternetDateTime, .withFractionalSeconds]) }
extension Date { var iso8601: String { return Formatter.iso8601.string(from: self) } }
extension String { var iso8601: Date? { return Formatter.iso8601.date(from: self) } }
Using:
Date().description(with: .current) // Tuesday, February 5, 2019 at 10:35:01 PM Brasilia Summer Time" let dateString = Date().iso8601 // "2019-02-06T00:35:01.746Z" if let date = dateString.iso8601 { date.description(with: .current) // "Tuesday, February 5, 2019 at 10:35:01 PM Brasilia Summer Time" print(date.iso8601) // "2019-02-06T00:35:01.746Z\n" }
iOS 9 • Swift 3 or later
extension Formatter { static let iso8601: DateFormatter = { let formatter = DateFormatter() formatter.calendar = Calendar(identifier: .iso8601) formatter.locale = Locale(identifier: "en_US_POSIX") formatter.timeZone = TimeZone(secondsFromGMT: 0) formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX" return formatter }() }

Leo Dabus Jan 19 '15 at 1:18 2015-01-19 01:18
source share