Преобразование ISO 8601 в NSDate

У меня есть timestamp, исходящая от сервера, которая выглядит так:

2013-04-18T08:49:58.157+0000 

Я попытался удалить двоеточие, я пробовал все это:

Преобразование метки времени ISO 8601 в NSDate: как вы работаете с временным смещением UTC?

Почему NSDateFormatter не может анализировать дату из формата ISO 8601

Вот где я нахожусь:

 + (NSDate *)dateUsingStringFromAPI:(NSString *)dateString { NSDateFormatter *dateFormatter; dateFormatter = [[NSDateFormatter alloc] init]; //@"yyyy-MM-dd'T'HH:mm:ss'Z'" - doesn't work //@"yyyy-MM-dd'T'HH:mm:ssZZZ" - doesn't work //@"yyyy-MM-dd'T'HH:mm:sss" - doesn't work [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"]; [dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]]; // NSDateFormatter does not like ISO 8601 so strip the milliseconds and timezone dateString = [dateString substringWithRange:NSMakeRange(0, [dateString length]-5)]; return [dateFormatter dateFromString:dateString]; } 

Один из моих самых больших вопросов – это формат даты, который у меня выше ISO 8601? Все примеры, которые я видел от людей, форматы каждого из них несколько отличаются. У некоторых есть ...157-0000 , у других нет ничего в конце.

Это работает для меня:

 NSString *dateString = @"2013-04-18T08:49:58.157+0000"; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZ"]; // Always use this locale when parsing fixed format date strings NSLocale *posix = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; [formatter setLocale:posix]; NSDate *date = [formatter dateFromString:dateString]; NSLog(@"date = %@", date); 

Новый API от Apple! NSISO8601DateFormatter

 NSString *dateSTR = @"2005-06-27T21:00:00Z"; NSISO8601DateFormatter *formatter = [[NSISO8601DateFormatter alloc] init]; NSDate *date = [formatter dateFromString:dateSTR]; NSLog(@"%@", date); 

У меня также есть собственный API, который является более чистым … Это реализация, которую я получил в моем classе DateTimeManager:

 + (NSDate *)getDateFromISO8601:(NSString *)strDate{ NSISO8601DateFormatter *formatter = [[NSISO8601DateFormatter alloc] init]; NSDate *date = [formatter dateFromString: strDate]; return date; } 

Просто скопируйте и вставьте метод, это сделает трюк. Наслаждайся этим!

  • Установить цвет области TextView в Android
  • Как установить языковой стандарт cout для вставки запятых в качестве разделителей тысяч?
  • Форматировать XML-код в Eclipse
  • Как преобразовать текущую дату в строку в java?
  • Форматирование JSON в C #?
  • Подчеркивание текста в UIButton
  • форматируйте число с запятыми и десятичными знаками в C # (asp.net MVC3)
  • что такое идентификаторы формата scanf ("% * s") и scanf ("% * d")?
  • std :: string форматирование, подобное sprintf
  • Преобразовать java.util.Date в строку
  • Связывание MVC DateTime с неправильным форматом даты
  • Давайте будем гением компьютера.