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

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

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

Есть ли способ обнаружить эту настройку 12/14 часов?

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

Вы используете 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"];

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

Другие вопросы по тегам