2014-11-17 3 views
0

В моей Transaction, я получаю дату в формате, какObjective-C: Невозможно разобрать дату из строки

"2014-11-16T23:18:17.880" 

Я пытаюсь разобрать дату как

NSDate *transactionDate = [self getTransactionDateFromString:transactionModel.date]; 

и

- (NSDate *)getTransactionDateFromString:(NSString *)dateString { 
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
    [dateFormat setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'.Z'"]; 
    return [dateFormat dateFromString:dateString]; 
} 

Но это возвращает nil.

Что я делаю неправильно?

+3

Вы должны использовать формат даты, который фактически соответствует вашей строки даты. Строка не заканчивается буквенным текстом '.Z'. – rmaddy

ответ

1

Ваше значение даты содержит миллисекунду в конце. Поэтому используйте SSS вместо Z, который установит вашу дату в соответствии с форматом.

Заменить строку ниже: -

[dateFormat setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'.Z'"]; 

Для модифицированной линии: -

[dateFormat setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSS"]; 
+0

Вот и все. Спасибо 'Hussain' – daydreamer

+1

Это неправильно. Почему это было принято? Конечного '' 'не должно быть. И нет причин помещать какие-либо знаки препинания в кавычки, просто 'T'. – rmaddy

+0

Все цитирование не требуется, должны быть указаны только распознанные символы форматирования (от a до z и от A до Z), которые являются литералами. См.: [Даты и время форматирования ICU] (http://userguide.icu-project.org/formatparse/datetime) – zaph

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