2013-03-16 3 views
-2

Я пытаюсь преобразовать NSString в NSDate в 12-часовом формате. (В IOS 6)Проблема форматирования NSDateFormatter

Код:

NSString *Bdt = @"05/23/2012 08:00 AM" 
NSDateFormatter *df = [[[NSDateFormatter alloc] init] autorelease]; 
[df setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; 
[df setDateFormat:@"MM/dd/yyyy hh:mm a"]; 
NSDate *bd = [df dateFromString:Bdt]; 
NSLog(@"%@",bd); 

Выход:

2012-05-23 08:00:00 +0000 должно быть 2012-05-23 8:00 утра

Что не так в коде?

Благодаря

+0

Ничего страшного здесь. Если вы NSLog NSDate (т. Е. Назовите 'описание' на нем), вы получите' 2012-05-23 08:00:00 + 0000'. –

+0

Вы получаете 08:00 –

+0

@MatthiasBauch: да, но это должно быть '2012-05-23 08:00 AM' – user1859900

ответ

3

Если вы хотите даты в 2012-05-23 08:00 AM стиле

Создать dateformatter и setDateFormat в yyyy-MM-dd hh:mm a

NSString *Bdt = @"05/23/2012 08:00 AM"; 
NSDateFormatter *df = [[NSDateFormatter alloc] init] ; 
[df setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; 
[df setDateFormat:@"MM/dd/yyyy hh:mm a"]; 
NSDate *bd = [df dateFromString:Bdt]; 

NSDateFormatter *dateFormatter=[NSDateFormatter new]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd hh:mm a" ]; 
NSString *datestr=[dateFormatter stringFromDate:bd]; 
NSLog(@"%@",datestr); 

* Примечание: Я использую ARC, поэтому объекты не будут освобождены/autoreleased.

EDIT:

NSDate будет в этом формате ТОЛЬКО: 2012-05-23 08:00:00 +0000.

Для любого другого формата вам необходимо использовать NSString.

+0

Пожалуйста, внимательно прочитайте мой вопрос ... Я упомянул, что я пробовал ... – user1859900

+0

@ user1859900: теперь проверьте код –

+0

@MatthiasBauch: конечно 'NSLog' – user1859900

3

В этом нет ничего плохого. Вы печатаете NSDate в NSLog, который сильно отличается от создания NSString с определенным форматом.

Кажется, что вы сбиваете с толку внутреннее представление NSDate со строковым форматированием. NSDate хранит дату внутри страны таким образом, который отличается от того, как он представлен людьми. Точно так же, как NSString хранит строки в формате, который может и не быть тем, что вы в конечном итоге хотите кодировать, например. ASCII или UTF-8. Когда вы вызываете NSLog, вы получаете диагностическое сообщение с указанием даты в соответствии со строкой, возвращаемой - (NSString *)description или, возможно, - (NSString *)debugDescription.

+0

Да я просто пропустил эту часть спасибо :) – user1859900

Смежные вопросы