私はUIDatePickerを使って時間を選択しています。また、ピッカーの背景もカスタマイズしていますが、12時間モード(AM/PM列を表示)と24時間モードのどちらを使用しているかによって、2つの異なるイメージが必要です。 12/24時間のユーザー設定をどのように検出できますか?iPhone 24時間設定を検出する
おかげ
私はUIDatePickerを使って時間を選択しています。また、ピッカーの背景もカスタマイズしていますが、12時間モード(AM/PM列を表示)と24時間モードのどちらを使用しているかによって、2つの異なるイメージが必要です。 12/24時間のユーザー設定をどのように検出できますか?iPhone 24時間設定を検出する
おかげ
でも短い多く、多くはおそらくあります。
に記載されているように210NSString *format = [NSDateFormatter dateFormatFromTemplate:@"j" options:0 locale:[NSLocale currentLocale]];
BOOL is24Hour = ([format rangeOfString:@"a"].location == NSNotFound);
午前/午後記号を表す文字列フォーマット文字は、「A」です。
同じ文書は、特別なテンプレート記号「J」を説明します
これは特殊な目的のシンボルです。パターンまたはスケルトンデータには発生してはなりません。代わりに、柔軟な日付パターン生成を行うAPIに渡されたスケルトンで使用するために予約されています。そのようなコンテキストでは、h、H、K、またはkがロケールの標準の短い時間形式で使用されるかどうかによって決定されるロケール(h、H、K、またはk)の優先時間形式を要求します。このようなAPIの実装では、availableFormatsデータとの一致を開始する前に、 'j'をh、H、K、またはkに置き換える必要があります。 APIに渡されるスケルトンで 'j'を使用するのは、スケルトン要求にロケールの優先時間サイクルタイプ(12時間または24時間)を要求する唯一の方法です。
NSString
方法dateFormatFromTemplate:options:locale:
は、AppleのNSDateFormatter
documentationに記載されている:
は、フォーマットコンポーネントが指定されたロケールに適切に配置された指定された日付を表すローカライズされた日付の書式文字列を返します。
だから、何という方法がどうなることは、あなたがNSDateFormatter
に適したフォーマット文字列にして、テンプレートとして渡す@"j"
を回しています。この文字列にAM/PM記号@"a"
が含まれている場合は、ロケール(およびOSによって質問される他のユーザー設定)がam/pmを表示することがわかります。日付延長の形で二つの最も人気のあるソリューションの
私はそれをもっと近く読むまで、私はあなたの答えを完全に投票していませんでした。それは賢いです。良いですね! – Benjohn
これを追加すると、シミュレータでは機能しません。 – GuybrushThreepwood
スウィフト(3.xの)バージョン:
extension Date {
static var is24HoursFormat_1 : Bool {
let dateString = Date.localFormatter.string(from: Date())
if dateString.contains(Date.localFormatter.amSymbol) || dateString.contains(Date.localFormatter.pmSymbol) {
return false
}
return true
}
static var is24HoursFormat_2 : Bool {
let format = DateFormatter.dateFormat(fromTemplate: "j", options: 0, locale: Locale.autoupdatingCurrent)
return !format!.contains("a")
}
private static let localFormatter : DateFormatter = {
let formatter = DateFormatter()
formatter.locale = Locale.autoupdatingCurrent
formatter.timeStyle = .short
formatter.dateStyle = .none
return formatter
}()
}
使用法:
Date.is24HoursFormat_1
Date.is24HoursFormat_2
スウィフト(2。0)NSDate延長の形で二つの最も人気のあるソリューションのバージョン:日付フォーマッタを作成
が安く操作ではありません。
extension NSDate { class var is24HoursFormat_1 : Bool { let dateString = NSDate.localFormatter.stringFromDate(NSDate()) if dateString.containsString(NSDate.localFormatter.AMSymbol) || dateString.containsString(NSDate.localFormatter.PMSymbol) { return false } return true } class var is24HoursFormat_2 : Bool { let format = NSDateFormatter.dateFormatFromTemplate("j", options: 0, locale: NSLocale.autoupdatingCurrentLocale()) return !format!.containsString("a") } private static let localFormatter : NSDateFormatter = { let formatter = NSDateFormatter() formatter.locale = NSLocale.autoupdatingCurrentLocale() formatter.timeStyle = .ShortStyle formatter.dateStyle = .NoStyle return formatter }() }
AppleはNSDateFormatter(Date Formatters)上で、次の言うことに注意してください。 でフォーマッタを頻繁に使用する可能性がある場合は、複数のインスタンスを作成して破棄するよりも、単一のインスタンスを にキャッシュする方が効率的です。 1つの方法は、静的変数を使用することです。静的理由厥
は、第二に、あなたが(is24HoursFormat_1用)NSLocale.autoupdatingCurrentLocale()、あなたは常に実際の現在の状態を取得しますその方法を使用する必要があります
をしましょう。
うわー、ありがとう。私は通常スタックオーバーフローの結果を表示するGoogleの検索を行ったが、私は完全に空白になった! – Darren