2017-02-10 3 views
3

Я столкнулся с проводной проблемой с NSDateFormatter.Проблема с NSDateFormatter, в то время как NSDate из строки со временем только

Ниже мой код:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"hh:mma"]; 
NSString *currentHours = [formatter stringFromDate:[NSDate date]]; 
NSLog(@"Hours: %@", currentHours); 

Если устройство настройки установлено, чтобы показать время в течение 12 часов (т.е. с AM & PM) Ниже выход:

Hours: 12:40PM 

Если установка устройства установленное для отображения времени в течение 24 часов, составляет:

Hours: 12:41 

Это также влияет на мой o это код.

NSDate *open = [formatter dateFromString:@"08:00am"]; 
NSDate *close = [formatter dateFromString:@"05:00"]; 

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

Если у кого-нибудь есть решение, сообщите мне.

+0

В 24 ч формата нет AM или PM –

+0

Я знаю, что. Но мой форматор даты @ "hh: mma". – OMK

+0

Я думаю, что ниже ответ поможет вам –

ответ

4

Установите форматтер локал:

formatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]; 

Однако, обратите внимание, что это заставит a на английские локализации "AM"/"П.М. ». Многие языки (включая мои) не используют суффикс для обозначения «AM»/«PM».

Это довольно неприятная ошибка, но если вам небезразлична локализация, вы должны соблюдать пользовательские настройки и не заставлять 12h vs 24h time.

В идеале, вы должны просто установить стиль форматере и пусть использовать системные параметры:

dateFormatter.dateStyle = NSDateFormatterNoStyle; 
dateFormatter.timeStyle = NSDateFormatterShortStyle 
2

Установите локалите форматер явно en_US_POSIX

formatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]; 
Смежные вопросы