2017-10-26 18 views
0

のXcode 9.0.1・スウィフト4・iPhone 5S一貫性のない日付形式

私は私のアプリで取得しています問題を再現するために、私は、単一のビューアプリケーションを作成し、ViewController.viewDidLoad()に次の3行のコードを追加しました:

let formatter = DateFormatter() 
    formatter.dateFormat = "HH:mm" 
    print(formatter.string(from: Date())) 

アプリはその後、私のiPhone上で実行されて、私は次のような結果を得る:携帯電話は、24時間の時間(設定>日付&時間> 24時間の時間)をコードプリントに設定されている場合

をコンソールの "07:45"。

設定で24時間がオフになっている場合は、コンソールに「7:45 am」と表示されます。

質問:電話機の設定ではなく、フォーマッタの出力を一貫させるにはどうすればよいですか?

答えて

2

DateFormatterはデフォルトでシステムのロケールを使用しますが、デフォルトの設定を上書きするように設定することができます。あなたはこのようにフォーマッタのロケールを設定することができます。

let formatter = DateFormatter() 
formatter.dateFormat = "HH:mm" 
formatter.locale = Locale(identifier: "en_US_POSIX") // This uses am/pm, use a different locale for 24-hour 
print(formatter.string(from: Date())) // Prints "12:23" 

あなたはこのように書式設定の時間を強制することができます

let formatter = DateFormatter() 
formatter.dateFormat = "HH:mm" 
formatter.setLocalizedDateFormatFromTemplate("HH:mm") 
print(formatter.string(from: Date())) // Prints "09:47" 

formatter.setLocalizedDateFormatFromTemplate("hh:mm") 
print(formatter.string(from: Date())) // Prints "9:47 AM" 
+0

これは動作するようです。たとえ "en_US"ロケールが12時間フォーマットを優先しても、それを置くことは、フォーマッタを期待どおりに動作させるように見えます。 (その結果、コメントは間違っているように見えます)。ロケールによっては、フォーマッタを動作させる可能性があると仮定します。いくつかの実験が必要でした。ありがとう。 –

+0

ロケールを有効、無効、空の文字列に設定すると、問題が解決するようです。 –

+0

@ VinceO'Sullivan '' en_US_POSIX "'(英語(米国、コンピュータ))を使用するべきです。 –

0

変更DATEFORMAT HH へ:ミリメートルAA

let formatter = DateFormatter() 
formatter.dateFormat = "HH:mm aa" 
print(formatter.string(from: Date())) 

出力:(24時間形式はオン/オフ)

11 :14 AM

+0

ありがとうございますが、私はそのフォーマットを望んでいません。私は "HH:mm"を私の質問にしたい。 –

+0

@ VinceO'Sullivanあなたは同じ時間フォーマットを得るでしょうが、時間内にAM/PMを得ることを除けば。あなたは一貫性について尋ねました、これは24時間形式に関係なくON/OFFです。なぜdownvote? –