Как получить автоматическое 12/24-часовое форматирование для NSDateFormatter на основе текущей локали

Я застрял на глупой проблеме. Согласно Apple, установка свойства locale для экземпляра NSDateFormatter переопределяет некоторые настройки, например, предпочитает ли пользователь 12-часовой или 24-часовой формат. Вновь созданный экземпляр NSDateFormatter инициализируется текущей локалью. WWDC 2011 Session 117 рассказывает об этой проблеме 12/24 часа в 54:00. Вот код, который я использую:

NSDate *date = [NSDate date];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"HH:mm"];
NSLog(@"%@",[formatter stringFromDate:date]);

Согласно документам Apple и сеансу WWDC, это должно выводить текущее время с предпочтительной локалью пользователя, даже если формат явно установлен на HH:mm. Но по какой-то причине я всегда получаю 24-часовое представление. Я также пытался установить локаль специально для [NSLocale autoupdatingCurrentLocale], [NSLocale currentLocale] и кучу локалей разных стран. Тот же результат. Есть идеи?


person steverab    schedule 04.04.2014    source источник


Ответы (2)


Попробуйте установить timeStyle вместо dateFormat:

formatter.timeStyle = NSDateFormatterShortStyle;
formatter.dateStyle = NSDateFormatterNoStyle;
person David Berry    schedule 04.04.2014

Если вы предпочитаете свой собственный формат (например, вы не хотите отображать годы, которые включены в каждый стиль даты, предоставляемый системой), вы можете использовать j в шаблоне формата следующим образом:

NSDateFormatter *formatter = [NSDateFormatter new];
[formatter setLocalizedDateFormatFromTemplate:@"jjmm"];
person gklka    schedule 04.02.2019