DateFormatter 的 AM / PM 問題

當時間字串包含 AM / PM 資訊,我們想用 DateFormatter 將字串轉成 Date 時,需注意以下問題 :

當字串包含 AM / PM,iOS 的 24 小時制關掉時

let dateString = "2000/2/7 11:12 AM"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy/M/d h:m a"
let date = dateFormatter.date(from: dateString)

字串可以順利轉成 Date,不用做任何修改。

當字串包含 AM / PM,iOS 的 24 小時制打開時

let dateString = "2000/2/7 11:12 AM"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy/M/d h:m a"
dateFormatter.locale = Locale(identifier: "en")
let date = dateFormatter.date(from: dateString)

需要特別設定 locale, identifier 傳入 en,因為 AM / PM 是英文的格式。

當字串包含上午 / 下午

let dateString = "2000/2/7 11:12 上午"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy/M/d h:m a"
dateFormatter.locale = Locale(identifier: "zh")
let date = dateFormatter.date(from: dateString)

不管 iOS 的 24 小時制是否打開,都要設定 locale, identifier 傳入 zh,因為上午 / 下午是中文的格式。

--

--

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

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