利用 withFractionalSeconds 解析 ISO 8601 帶有小數的秒

開發 iOS App 時,我們可以用 ISO8601DateFormatter 解析 ISO 8601 格式的字串,然而 ISO 8601 有許多格式,比方以下格式我們可以順利解析。

let dateFormatter = ISO8601DateFormatter()
let date = dateFormatter.date(from: "2018-12-01T10:00:05Z")

但當 ISO 8601 帶有小數的秒時,它就無法解析了,無情地產生 nil。

let dateFormatter = ISO8601DateFormatter()
let date = dateFormatter.date(from: "2018-12-01T10:00:05.000Z")

其實 ISO8601DateFormatter 還是可以解析它的,只是要額外於 property formatOptions 設定 ISO 8601 的格式。

比方以下例子,我們設定 [.withInternetDateTime, .withFractionalSeconds],withInternetDateTime 指的是標準的 ISO 8601 格式,而 withFractionalSeconds 則包含小數的秒。

let dateFormatter = ISO8601DateFormatter()
dateFormatter.formatOptions = [.withInternetDateTime, .withFractionalSeconds]
let date = dateFormatter.date(from: "2018-12-01T10:00:05.000Z")

--

--

彼得潘的 iOS App Neverland
彼得潘的 Swift iOS App 開發問題解答集

彼得潘的iOS App程式設計入門,文組生的iOS App程式設計入門講師,彼得潘的 Swift 程式設計入門,App程式設計入門作者,http://apppeterpan.strikingly.com