2012-03-19 4 views
25

У меня есть NSString вроде этого: @"3/15/2012 9:15 PM", и я хотел бы, чтобы преобразовать его в NSDate, я сделал так:создать NSDate из строки

NSString *str [email protected]"3/15/2012 9:15 PM"; 
NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; 
[formatter setDateFormat:@"mm/dd/yyyy HH:mm"]; 
NSDate *date = [formatter dateFromString:]; 

NSLog(@"%@", date); // date = null 

Можете ли вы помочь мне, пожалуйста, спасибо.

+0

возможный дубликат [преобразования строки в NSDate] (http://stackoverflow.com/questions/2311421/convert-string- to-nsdate) –

ответ

55

Используйте следующее решение

NSString *str = @"3/15/2012 9:15 PM"; 
NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 

formatter.dateFormat = @"MM/dd/yyyy HH:mm a"; 

NSDate *date = [formatter dateFromString:str]; 

NSLog(@"%@", date); 

Edit: К сожалению, формат должен быть следующим:

formatter.dateFormat = @"MM/dd/yyyy hh:mm a"; 

И показанное время wil Время GMT. Поэтому, если вы добавите/вычтите часовой пояс, это будет 9:15 вечера.

Edit: # 2

использования, как показано ниже. Вы тоже получите точное время.

NSString *str = @"3/15/2012 9:15 PM"; 

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 

formatter.dateFormat = @"MM/dd/yyyy hh:mm a"; 

NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; 

formatter.timeZone = gmt; 

NSDate *date = [formatter dateFromString:str]; 

NSLog(@"%@",date); 
+0

Это не тот же результат: NSLog (@ "str") = 3/13/2012 2:00 PM NSLog (@ "date") = 2012-01-13 11:00:00 +0000 – samir

+0

Спасибо, дата такая же, но не время, извините – samir

+0

Я обновил свой ответ. Pl. Проверь это. – Ilanchezhian

0

Ммм - вы пошли не по нескольким причинам

  1. NSDateFormatter является строгим, и вы не были.
  2. вы не снабжали ул к dateFromString:
NSString* str = @"3/15/2012 9:15 PM"; 
NSDateFormatter* formatter = [[NSDateFormatter alloc]init]; 
[formatter setDateFormat:@"MM/dd/yyyy HH:mm a"]; 
NSDate* date = [formatter dateFromString:str]; 


NSLog(@"%@",date); 
+0

argh - не удается получить форматирование ....... – Damo

+0

Спасибо, но все мои строки похожи на это @ "mm/dd/yyyy HH: mm PM/AM", это веб-сервис, который возвращается для меня это – samir

+0

3 верно, если только он не использует ARC. –

0
NSString *str [email protected]"3/15/2012 9:15 PM"; 
NSDateFormatter *dateformatter = [[NSDateFormatter alloc]init]; 
    [dateformatter setDateFormat:@"MM/dd/yyyy"]; 
NSArray *firstSplit = [str componentsSeparatedByString:@" "]; 
NSDate *dateSelected = [dateformatter dateFromString:[firstSplit objectAtIndex:0]]; 

    [dateformatter setDateFormat:@"mm:ss"]; 
NSDate *dateSelected2 = [dateformatter dateFromString:[firstSplit objectAtIndex:1]]; 
NSLog(@"%@",[dateformatter stringFromDate:dateSelected2]); 

NSLog(@"%@",[dateformatter stringFromDate:dateSelected]); 
+0

Спасибо, он работает, но проблема со временем: – samir

+0

в чем проблема, вы хотите время –

+0

do u хотите показать время также –

1

Ваш форматировщик неправильно. Согласно документации NSDateFormatter, она должна быть «MM/dd/yyyy h: mm a». Вы также, вероятно, хотите установить локаль, как указано в Дата форматирования Руководство:

Если вы работаете с датами фиксированного формата, вы должны сначала установить локализаций даты форматировщиком к чему-то подходит для вашего фиксированного формат. В большинстве случаев лучшим выбором для локали является en_US_POSIX, локальный язык , который специально разработан для получения результатов на английском языке в США независимо от пользовательских и системных настроек.

Попробуйте это:

NSString *str = @"3/15/2012 9:15 AM"; 
NSLocale *enUSPOSIXLocale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease]; 
NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; 
[formatter setLocale:enUSPOSIXLocale]; 
[formatter setDateFormat:@"MM/dd/yyyy h:mm a"]; 
NSDate *date = [formatter dateFromString:str]; 

NSLog(@"%@",date); 

Выходы:

2012-03-19 12:37:27.531 Untitled[6554:707] 2012-03-15 08:15:00 +0000 
Смежные вопросы