1

時刻形式が 12 時間/24 時間形式であることを検出しようとしています。それに基づいて、カレンダーで時間を設定しています。
次のコードを使用して、viewDidLoad メソッドでデバイスの 24 時間形式を検出しました。

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setLocale:[NSLocale currentLocale]];
[formatter setDateStyle:NSDateFormatterNoStyle];
[formatter setTimeStyle:NSDateFormatterShortStyle];
NSString *dateString = [formatter stringFromDate:[NSDate date]];
NSRange amRange = [dateString rangeOfString:[formatter AMSymbol]];
NSRange pmRange = [dateString rangeOfString:[formatter PMSymbol]];
is24h = (amRange.location == NSNotFound && pmRange.location == NSNotFound);

その後、私は次のようにチェックしています

if (is24h == TRUE) {
} else {
}

しかし、私は常にis24hの値がfalseになっています。デバイスが 12 時間形式に設定されている場合、カレンダーで時刻を設定できます。ただし、24 時間形式の場合、時刻を設定できません。

どこを変更する必要があるか教えてください。

4

3 に答える 3

9

この方法を使用して、時間形式を決定します

- (BOOL)timeIs12HourFormat {
    NSString *formatStringForHours = [NSDateFormatter dateFormatFromTemplate:@"j" options:0 locale:[NSLocale currentLocale]];
    NSRange containsA = [formatStringForHours rangeOfString:@"a"];
    BOOL hasAMPM = containsA.location != NSNotFound;
    return hasAMPM;
}

Unicode の日付形式ガイドによるj

これは専用のシンボルです。パターンまたはスケルトンデータで発生してはなりません。代わりに、柔軟な日付パターン生成を行うAPIに渡されるスケルトンで使用するために予約されています。このようなコンテキストでは、h、H、K、またはkがロケールの標準の短時間形式で使用されているかどうかによって決定される、ロケールの優先時間形式(h、H、K、またはk)を要求します。このようなAPIの実装では、availableFormatsデータとの照合を開始する前に、「j」をh、H、K、またはkに置き換える必要があります。APIに渡されるスケルトンで「j」を使用することが、スケルトンにロケールの優先タイムサイクルタイプ(12時間または24時間)を要求させる唯一の方法であることに注意してください。

編集

これは、最初にデバイスのcurrentLocaleからformatStringを取得し、次に「a」が存在するかどうかをチェックします。存在する場合は12時間形式であり、存在しない場合は24時間形式です。

于 2013-03-19T06:14:31.077 に答える
1

こんにちは今私のコードは正常に動作しています。私は次のようにコードを書きました。

-(BOOL)timeIs24HourFormat{

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setLocale:[NSLocale currentLocale]];
    [formatter setDateStyle:NSDateFormatterNoStyle];
    [formatter setTimeStyle:NSDateFormatterShortStyle];
    NSString *dateString = [formatter stringFromDate:[NSDate date]];
    NSRange amRange = [dateString rangeOfString:[formatter AMSymbol]];
    NSRange pmRange = [dateString rangeOfString:[formatter PMSymbol]];
    is24h = (amRange.location == NSNotFound && pmRange.location == NSNotFound);

    return is24h;
}
于 2013-03-19T06:50:52.373 に答える
-2

12 時間時計が必要な場合は、currentDate を次のように設定します。

[currentDate setDateFormat:@"yyyy-MM-dd h:mm:ss a"];

24 時間時計が必要な場合は、currentDate を次のように設定します。

[currentDate setDateFormat:@"yyyy-MM-dd HH:mm"];
于 2013-03-19T06:15:06.673 に答える