2011-01-14 3 views
1

Я преобразовываю строку, возвращенную с сервера на объект NSDate для дальнейшего использования.dateFromString возвращает nil на iOS 4.2, отлично работает на 3.2!

Вот пример строка с сервера: 2011-01-14T16:05:48.555+05:00

И я использую [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"];

Я могу успешно преобразовать его в объект NSDate с помощью метода dataFromString на прошивке 3.2 (устройство & симов, и другое).

Однако, тот же код возвращает nil на iOS 4.2 на устройстве & sim both.

Я также пробовал много вариантов шаблонов формата даты, такие как:

[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZ"]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZZZZ"]; 
[dateFormatter setDateFormat:@"YYY-MM-DD'T'HH:mm:ss.fffK"]; 

, но ничего не работает !!

Я что-то упустил?

EDIT: Я пытался жестко закодировать входную строку и после попытки много вариантов, следующая строка 2011-01-14T16:05:48.555+0500 работала с "yyyy-MM-dd'T'HH:mm:ss.SSSZ"

Обратите внимание, что единственное различие в этой строке, и один из сервера является; двоеточие (:) в значение TimeZone. Я попытался найти шаблон даты, где я могу упомянуть двоеточие в часовом поясе без успеха.

Любой ключ?

+1

См. http://stackoverflow.com/questions/4330137/parsing-rfc3339-dates-with-nsdateformatter-in-ios-4-x-and-macos-x-10-6-impossibl –

+0

Спасибо за упоминание, это помогло! –

ответ

1

Я не знаю, правильный ответ на ваш вопрос, но вы можете попробовать это решение:

Вы можете вручную удалить двоеточие (:) в значение TimeZone в строке, возвращаемый сервером и записать эту строку в новый , а затем используйте «yyyy-MM-dd'T'HH: mm: ss.SSSZ».

Исходный код:

NSString *[email protected]"2011-01-14T16:05:48.555+05:00"; 

NSString *str1 = [stringFromServer substringToIndex:26]; 

NSString *str2 = [stringFromServer substringFromIndex:27]; 

NSString *result=[NSString stringWithFormat:@"%@%@",str1,str2]; 

так, если это работает:

EDIT: Я пытался жестко закодировать входной строки и после попытки многих вариаций, следующую строку 2011-01-14T16 : 05: 48,555 + 0500 работал с "YYYY-MM-dd'T'HH: мм: ss.SSSZ" BLOCKQUOTE

затем "результат" строка будет работать с «YYYY-MM-dd'T» HH: мм: ss.SSSZ "

+0

Да, это похоже на то, что Мартин опубликовал в своем комментарии. Пока это единственное рабочее решение, которое я нашел, но я все еще ищу лучшее решение. –

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