2012-03-23 3 views
0

Я пытаюсь получить 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); 

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

+1

Я бы сказал, что вы сделали ошибку (слишком часто), не прочитав документацию, которую Apple предоставляет для SDK iOS. –

+0

@NickBull Вопрос был на самом деле немного сложным из-за различий между MMMM и LLLL, поэтому я счастлив, что нашел его местом при переполнении стека. –

ответ

2

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

Строка формата использует шаблоны формата от Unicode Technical Standard #35

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

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

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

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

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

+0

Отличный ответ, спасибо! Вы даже ответили на мой не заданный вопрос (например, автономно :)) – Stas

+0

Не могли бы вы ответить, почему я получаю дату = 1970-03-23 ​​01:00:00 +0000, хотя когда я преобразовать его в строку с помощью другого форматирования, похоже, все в порядке: в 4:00 AM, 23 марта. Я имею в виду - что происходит с часами? – Stas

+0

@Stas, Thx, я был удивлен, увидев «автономный», так что я хотя бы немного положил начало логике :) –

0

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

[firstDateFormatter setDateFormat:@"MMММ dd hh:mm a"]; 
Смежные вопросы