2017-04-17 9 views
1

私は少しの特異性に遭遇しました。なぜそれが起こっているのか、どう対処するのかは分かりません。DateFormatterはユーザーの時間設定に基づいて異なる動作をします

let formatter = DateFormatter() 
formatter.dateFormat = "h:mma" 
let timeString = "8:00am" 
let date = formatter.date(from: timeString)! 

このコードは、ユーザーが12時間の時計を使用するように設定されている場合に機能します。デバイスの時刻が24時間に設定されていると、デバイスがクラッシュします。

ユーザーの設定とは独立して動作させるにはどうすればよいですか?

+1

:http://stackoverflow.com/questions/40692378/dateformatter-doesnt-return-date-あなたがユーザーにフォーマットされた時間を表示したい場合は、はるかに優れたソリューションは、ユーザー定義の書式設定を使用することですfor-hhmmss –

答えて

4

、あなたがあなたの日付のタイムゾーンを設定する必要があり、このコードを試してみてください。

formatter.locale = Locale(identifier: "en_US_POSIX") 

technical note QA1480を参照してください。

iOSでは、デフォルトのAM/PMと24時間の設定を上書きできます(設定>一般>日付&時間> 24時間)、これにより、設定した書式文字列がNSDateFormatterによって書き換えられ、時間解析が失敗する可能性があります。それはあなたが/エンコードのデータを解析していない場合は、特定の時刻形式を適用するために悪い習慣だと

注意。同様の

let formatter = DateFormatter() 
formatter.dateStyle = .none 
formatter.timeStyle = .short 
+1

*「特定の時刻形式(データの解析/エンコードを行っていない場合)を強制するのは悪い習慣です」。* ...質問は「このデータをどのように解析するのか」のように見えます。正解***は '.locale'を使う***です。この場合、「より良い解決策」が失敗します。 – DonMag

+0

@DonMag私は実際にパーズについて何も見ることはありませんが、私は少し私の答えの音色を変更します。 – Sulthan

+0

これは具体的には、サーバーから所定の形式のデータを解析するためのものです。ありがとうございました! – Erik

0

あなたは、標準のPOSIXロケールにロケールを変更する必要があります

let formatter = DateFormatter() 
formatter.dateFormat = "h:mma" 
formatter.timeZone = TimeZone.init(identifier: "UTC") 
let timeString = "8:00am" 
let date = formatter.date(from: timeString)! 

print(date) 
関連する問題