Получить формат времени (AM/PM или 24 часа) из текущего календаря / локали
Я хочу создать свой пользовательский формат времени, но мне нужно знать, хотят ли системные настройки пользователя использовать 24-часовой формат или формат AM/PM. Я просмотрел NSCalendar и NSLocale, но не смог найти его.
***ОБНОВИТЬ
Так как другой вопрос явно не дает нам знать, как получить, если пользователь хочет 24-часовой стиль времени, я отвечаю на этот вопрос из 2 других вопросов, которые я нашел. Но все еще нужно подтверждение, если это будет работать?
NSString *fmt = [NSDateFormatter dateFormatFromTemplate:@"jm" options:0 locale:[NSLocale currentLocale]];
BOOL is24HourStyle = [fmt rangeOfString:@"HH"].location != NSNotFound;
NSLog(@"%@", fmt);
NSLog(@"is 24 %@", is24HourStyle ? @"YES" : @"NO");
1 ответ
Согласно http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html:
- "j" - специальный символ для гибкой генерации шаблона даты. Он запрашивает предпочтительный часовой формат для локали и должен быть заменен на "h", "H", "K" или "k".
- "h" и "K" являются символами для 12-часовых форматов цикла.
- "H" и "k" являются символами для 24-часовых форматов цикла.
Поэтому, чтобы проверить 24-часовой формат, вы должны проверить, встречаются ли 'H' или 'k' в формате, сгенерированном из шаблона:
NSString *fmt = [NSDateFormatter dateFormatFromTemplate:@"jm" options:0 locale:[NSLocale currentLocale]];
BOOL is24HourStyle = [fmt rangeOfString:@"H"].location != NSNotFound
|| [fmt rangeOfString:@"k"].location != NSNotFound;
Я не смог найти локаль, где часовой формат равен "k" или "K", но, например, в финальной локали "jm" расширяется до "H.mm", поэтому проверка на "HH" не верна.