Обнаружьте, отображает ли iPhone время в 12-часовом или 24-часовом Режиме?

Как можно обнаружить, отображает ли iPhone время в 12-часовом или 24-часовом Режиме?

Я в настоящее время контролирую текущий регион для изменений, однако это не единственная установка, которая влияет, как отображены времена. 24-часовой переключатель на дате и настройках времени переопределяет текущие настройки регионов.

Там какой-либо путь состоит в том, чтобы обнаружить этот 12/14 час, устанавливая?

10
задан Michael Waterfall 28 December 2009 в 23:30
поделиться

2 ответа

Я придумал приличный способ определить это с помощью небольшой функции, которую я добавил в категорию 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
15
ответ дан 3 December 2019 в 22:00
поделиться

Вы используете класс NSDateFormatter ? Насколько я знаю, это с уважением относится к любым настройкам регионального тайм-формата, которые есть у пользователя.

edit - re: your comment:

The format-string comparison might be the right approach. Что-то вроде:

 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"];

Запустите его, когда ваше приложение выйдет из игры, затем сделайте это снова, когда приложение запустится, и сравните его со значением, сохраненным по умолчанию

.
1
ответ дан 3 December 2019 в 22:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: