私の問題は、アプリに12時間と24時間の時間形式で切り替わるスイッチがあることです。それに応じてラベルの時間を表示していますが、UIDatePicker
時間は変更されていません。時間は、デバイスの時間設定の形式。アプリの設定に従って、UIDatePicker
に時間を表示することは可能ですか?デバイスの時間設定とは異なる場合があります。 UIDatePickerがデバイス設定のみを尊重することをどこかで読みましたが、それでも、アプリの設定に基づいてUIDatePicker
で12時間と24時間の形式で時間を表示できるかどうか尋ねたいと思います。
私を助けてください。どんな提案も大歓迎です!
UIDatePicker
の場合、時刻形式を24または12に変更することはできません。これは、setting.appのユーザーローカル設定によって異なります。
このコードを試して、24時間形式をDatePicker
に表示します。
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"NL"];
[self.datePicker setLocale:locale];
Swiftの場合
// myDatePicker is yourUIDatePicker Outlet
@IBOutlet weak var myDatePicker: UIDatePicker!
// For 24 Hrs
myDatePicker.locale = NSLocale(localeIdentifier: "en_GB") as Locale
//For 12 Hrs
timePickerView.locale = NSLocale(localeIdentifier: "en_US") as Locale
Swift 4 ak2gの回答のバージョン:
// myDatePicker is yourUIDatePicker Outlet
@IBOutlet weak var myDatePicker: UIDatePicker!
// For 24 Hrs
myDatePicker.locale = Locale(identifier: "en_GB")
//For 12 Hrs
myDatePicker.locale = Locale(identifier: "en_US")
もっと簡単な方法を見つけて、ストーリーボードのUIDatePicker属性インスペクターをクリックして、ロケールを「英語(ヨーロッパ)」に設定します。これにより、AM/PMの切り替えがなくなり、時刻が24時間形式に設定されます。
代わりに結果を簡単にフォーマットする
ローカルデバイスは24時間ではないため。 12時間形式の選択時間は問題ありません。主にこの問題は、サーバーに時間を送信しようとしたときに発生します。 24時間形式で要求するサーバー。
ただし、ユーザーにとっては、24時間形式ではなく12時間形式を使用する方が簡単です。ただし、サーバーは通常24時間形式である必要があります。
あなたが言及したので
デバイスの設定ではありません
私はあなたが電話でユーザーのデフォルト設定を中断することなくこれを実現しようとしていると仮定することができます。しかし、問題がビューにある場合、
myDatePicker.locale = NSLocale(localeIdentifier: "en_GB")
それを行う唯一の方法です。
24h形式で表示するのではなく、結果値を24h形式に変換しました。
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH:mm"
print("\(pickerView.date)") // 10:30 PM
let dateSelect = dateFormatter.string(from: pickerView.date)//pickerView = to your UIDatePicker()
self.tfclosing.text = dateSelect // 22:30
UIDatepickerにロケールプロパティを設定して、ユーザーのロケールがデフォルトにならないようにします。
これが documentation です。そのため、必ず 言語ではなく国 を設定してください。
編集:実際、iOS 5.0ではロケールが廃止されたようです。 Appleは人々がそれを上書きすべきではないと思ったと思います。