Определить, отображает ли 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"];
Запустите его при выходе из приложения, затем повторите его при запуске приложения и сравните его со значением, сохраненным в значениях по умолчанию.