2013-12-10 4 views
1

Привет Мне нужно преобразовать эту строкуКак конвертировать Дата из JSON в NSDate

"2013-12-05T08: 58: 55,9345456 + 02: 00"

к NSDate Я Есмь пытаясь следующий формат, но без удачи

"YYYY-MM-dd'T'HH: мм: SSSSSSSZZZZZ"

Код ниже.

Можете ли вы помочь мне с правильного формата

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
//       "2013-12-05T08:58:55.9345456+02:00" 
[dateFormat setDateFormat:@"yyyy-MM-dd'T'HH:mm:SSSSSSSZZZZZ"]; 

NSDate *date = [dateFormat dateFromString:jsonDateString]; 
+0

попробуйте этот https://gist.github.com/exalted/726910 – Sport

+1

'[dateFormat setDateFormat: @" yyyy-MM-dd'T'HH: mm: ss '.' S '+ 02: 00' " ]; ' –

+0

@AnoopVaidya Это не правильный формат для строки. – rmaddy

ответ

4

Ваш формат близок , Вам нужно:

yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZZZZZ 

И не забудьте установить локаль форматировщика в en_US_POSIX. Это всегда должно выполняться при анализе фиксированных форматированных, нелокализованных строк.

+0

Извините, но когда я попробовал этот, я получаю (null). Я использую OSX. –

+0

@AnoopVaidya Обязательно установите языковой стандарт форматирования 'en_US_POSIX'. – rmaddy

+0

Оставьте это, он не работает в OSX proj. Это может работать над проектом iOS. :( –

1
NSString * dateStr = @"2013-12-05T08:58:55.9345456+02:00"; 
NSArray *dateStrParts = [dateStr componentsSeparatedByString:@"T"]; 
NSString *datePart = [dateStrParts objectAtIndex:0]; 
NSString *timePart = [dateStrParts objectAtIndex:1]; 

NSString *t = [[timePart componentsSeparatedByString:@"."] objectAtIndex:0]; 
NSString *newDateStr = [NSString stringWithFormat:@"%@ %@",datePart,t]; 

NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
[df setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; 
[df setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; // Change here for your formated output 
NSDate *date = [df dateFromString:newDateStr]; 
NSLog(@"%@",date); 

Выход

2013-12-05 08:58:55 +0000

+0

Вместо всей этой строковой обработки просто используйте правильный формат даты. – rmaddy

1

Проблема заключается в том, что у вас есть +02:00.

ZZZZ анализирует только +0000, поэтому вы получаете nil.

Вы можете сделать таким образом:

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
NSString *jsonDateString = @"2013-12-05T08:58:55.9345456+02:00";//@"2013-12-05T08:58:55.9345456+02:00" 

NSRange lastColon = [jsonDateString rangeOfString:@":" options:NSBackwardsSearch]; 
if(lastColon.location != NSNotFound) { 
     jsonDateString = [jsonDateString stringByReplacingCharactersInRange:lastColon withString: @""]; 
} 

[dateFormat setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'.'SZ"]; 
NSDate *date = [dateFormat dateFromString:jsonDateString]; 

NSLog(@"%@",date) 

EDIT:

Согласно комментарий rmaddy, вы должны использовать SSSSS вместо одного S.

+0

Часовой пояс '+02: 00' можно разделить на формат даты« ZZZZZ ». И почему вы выбрасываете десятичные секунды? – rmaddy

+0

@rmaddy: его там как 'S' есть ... И я пробовал с' ZZZZZ', но его не получал разобранный :( –

+0

Делает ли один 'S' несколько дробных цифр? Зачем удалять двоеточие из часового пояса? могут обрабатываться с надлежащим форматом. – rmaddy

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