iPhoneが12時間モードまたは24時間モードで時間を表示しているかどうかを検出しますか?

StackOverflow https://stackoverflow.com/questions/1972108

  •  21-09-2019
  •  | 
  •  

質問

iPhoneが12時間モードまたは24時間モードで時間を表示しているかどうかをどのように検出できますか?

現在、現在の領域を監視していますが、時間の表示方法に影響する設定は唯一の設定ではありません。日付と時刻設定の24時間のトグルは、現在の領域設定をオーバーライドします。

この12/14時間の設定を検出する方法はありますか?

役に立ちましたか?

解決

カテゴリに追加した小さな関数でこれを決定するまともな方法を見つけました NSLocale. 。それはかなり正確であるように見え、いくつかの領域でテストしている間、それについて問題を発見していません。

@implementation NSLocale (Misc)
- (BOOL)timeIs24HourFormat {
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateStyle:NSDateFormatterNoStyle];
    [formatter setTimeStyle:NSDateFormatterShortStyle];
    NSString *dateString = [formatter stringFromDate:[NSDate date]];
    NSRange amRange = [dateString rangeOfString:[formatter AMSymbol]];
    NSRange pmRange = [dateString rangeOfString:[formatter PMSymbol]];
    BOOL is24Hour = amRange.location == NSNotFound && pmRange.location == NSNotFound;
    [formatter release];
    return is24Hour;
}
@end

他のヒント

使用していますか NSDateFormatter クラス?私の知る限り、それはユーザーが導入している地域の時間形式の設定を尊重しています。

編集 - Re:あなたのコメント:

フォーマットストリングの比較が正しいアプローチかもしれません。の線に沿って何か:

 NSDateComponents *midnightComp = [[NSDateComponents alloc] init];
 [midnightComp setHour:0]
 [midnightComp setMinute:0];
 NSDateFormatter *format = [[NSDateFormatter alloc] init];
 [format setDateStyle:NSDateFormatterNoStyle];
 [format setTimeStyle:NSDateFormatterShortStyle];
 BOOL midnightIsZeros = [[[format stringFromDate:[[NSCalendar currentCalendar] dateFromComponents:midnightComp]] substringToIndex:2] isEqualToString:@"00"];

 [[NSUserDefaults standardUserDefaults] setBool:midnightIsZeros forKey:@"TimeWas24Hour"];

アプリが終了するときにそれを実行し、アプリが起動したときに再度実行し、デフォルトに保存されている値に対してそれをチェックします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top