Вопрос

Я действительно хочу знать, установил ли пользователь iPhone в 12-часовой режим для отображения времени.

Класс NSLocale , казалось, описывал (в неопределенных неопределенных терминах без каких-либо примеров или явно полезных методов) то, что я преследовал.

Итак, я создал несколько объектов NSLocale , например:

NSLocale *systemLocaleApparently = [NSLocale systemLocale];
NSLocale *currentLocaleWithLotsOfGoodies = [NSLocale autoupdatingCurrentLocale];

Когда я проверяю эти объекты с помощью отладчика или NSLog () , лучшее, что я могу получить, это что-то вроде этого:

<CFLocale 0x1278e0 [0x382084f8]>{type = system, identifier = ''} 

В текущей локали есть строка идентификатора, но больше ничего.

Из документации я могу искать значения из локали, и одним из них является объект NSCalendar . Поэтому я получаю это назад и смотрю на него, и оно говорит мне, что это «григорианский».

Все это, по-видимому, полезно кому-то ... но что мне действительно нужно, так это хороший большой словарь атрибутов, показывающий все действительные системные свойства, главным образом, чтобы мои NSDateFormatters don ' Продолжать взрываться, когда пользователь выбирает 12-часовой формат, даже если я заставил форматировщики использовать локаль en_US_POSIX и фиксированный формат setDate .

(я уверен, что NSCalendarDate никогда не имел таких проблем ...)

Надеюсь, я упускаю что-то вопиющее (и, вероятно, неловко) очевидное, но, возможно, кто-то добрый поделится этим со мной. Пожалуйста:)

Это было полезно?

Решение

Вот один из способов узнать, установил ли пользователь свой формат времени на 12- или 24-часовой формат:

NSDateFormatter* formatter = [[[NSDateFormatter alloc] init] autorelease];
[formatter setTimeStyle:NSDateFormatterMediumStyle];
// Look for H (24-hour format) vs. h (12-hour format) in the date format.
NSString* dateFormat = [formatter dateFormat];
BOOL using24HourClock = [dateFormat rangeOfString:@"h"].location == NSNotFound;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top