Написание правильной метки времени для строковой даты - PullRequest
0 голосов
/ 23 марта 2012

Я пытаюсь получить NSDate из заданной строки:

NSString* dateString = @"March 23 04:00 AM";
NSDateFormatter* firstDateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[firstDateFormatter setDateFormat:@"MMММ dd h:mm a"];
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
[firstDateFormatter setLocale:locale];
NSDate* date = [firstDateFormatter dateFromString:dateString];
NSLog(@"date:%@", date);

Дата, которую я получаю, является нулевой, где я допустил ошибку?

Ответы [ 2 ]

2 голосов
/ 23 марта 2012

Существует проблема с установленным форматом даты. По яблоку

В строке формата используются шаблоны формата из Unicode Technical Стандарт № 35

В вашем случае вам нужно использовать автономную версию месяца, которая LLLL не MMMM. Если вы измените эту строку, ваш код будет работать нормально

[firstDateFormatter setDateFormat:@"LLLL dd hh:mm a"];

Стандарт поясняет автономную версию следующим образом:

Самое важное различие между форматом и автономным формы - это грамматическое различие для языков, которые в этом нуждаются. За Например, многие языки требуют, чтобы название месяца без номер соответствующего дня указывается в основной номинативной форме, а месяц имя с соответствующим номером дня должно быть в другом грамматическая форма: родительный, разделительный и т. д. Еще один распространенный тип различие между форматом и автономностью предполагает использование заглавных букв; тем не менее, это может контролироваться отдельно и более точно с помощью элемент, как описано в разделе 5.19 Элементы ContextTransform.

Btw. Прочитайте это , оно содержит много информации и лучшие способы инициализации dateformatter.

0 голосов
/ 23 марта 2012

Используйте hh для двузначных часов:

[firstDateFormatter setDateFormat:@"MMММ dd hh:mm a"];
...