iOSアプリ開発でのやらかしを振り返る(2)
DateFormatterでのクラッシュ
Pythonでいうdatetime.datetime.strptime()をSwiftでやりたいと考えました。
from datetime import datetime
date = datetime.strptime("201912191800", "%Y%m%d%H%M")
SwiftにはDateFormatterというクラスがあるので、それを利用して文字列をパースしてDate型にする関数を実装しようとしました。
func strptime(string: String, format: String) -> Date {
let formatter = DateFormatter()
formatter.calendar = Calendar(identifier: .gregorian)
formatter.dateFormat = format
return formatter.date(from: string)! // 時刻表示設定が12hのとき、ここでnilをunwrapしようとして落ちる
}
let date = strptime("201912191800", "yyyyMMddHHmmss")
しかし、、、これは特定の状況下で落ちます
具体的に言うと、端末時刻表示の設定が12hのときに落ちます(わたしは落としてしまいました)
どうやら、12h表示と24h表示でdateFormatが異なるようです
解決策
DateFormatterで使用するlocaleを固定してしまえばよいです。具体的にはen_US_POSIXを使用します。
これで時刻設定が12hや和暦に設定されているときでもnilを返さなくなります
dateFormatter.locale = Locale(identifier: "en_US_POSIX") // こいつを追加する