2013-12-02 4 views
2

я получаю следующее NSString из моего веб-API: @ "2013-12-03T19: 13: 56 + 00: 00"Преобразовать часовой пояс известно .isoformat() DateTime строку NSDate

Я хочу взять эту NSString и создайте соответствующий NSDate, используя NSDateFormatter. Для жизни я не могу понять строку форматирования, которая поможет мне сделать это. Я всегда получаю нуль. Вот что я пытаюсь сделать:

+ (NSDate *)dateFromUTCFormattedDateString:(NSString *)dateString 
{ 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"UTC"]; 
    [dateFormatter setTimeZone:timeZone]; 
    [dateFormatter setDateFormat:@"YYYY-MM-ddThh:mm:ssTZD"]; 
    // Apply the date formatter and return it. 
    return [dateFormatter dateFromString:dateString]; 
} 
+0

Возможный дубликат http://stackoverflow.com/questions/ 4999396/how-to-parse-a-date-string-in-nsdate-object-in-ios – rmaddy

ответ

1

Одна из проблем - это часовой пояс со встроенным «:». Используйте следующий формат даты:

@"yyyy-MM-dd'T'HH:mm:sszzz" 

Обратите внимание, что вместо 'TZD' 'zzz'.

См Руководство ICU пользователя: Formatting Dates and Times

enter image description here

Тест:

NSString *dateString = @"2013-12-03T19:13:56+00:00"; 

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"UTC"]; 
[dateFormatter setTimeZone:timeZone]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:sszzz"]; 

NSDate *dateFromString = [dateFormatter dateFromString:dateString]; 
NSLog(@"dateFromString: %@", dateFromString); 

NSLog выход:

dateFromString: 2013-12-03 19:13:56 +0000 
+0

Спасибо, изменение в строковом форматировании, которое вы предоставили, работает правильно. – ashutosh

+0

Спасибо за фрагмент кода. Я анализирую дату, основанную на времени, возвращенную из базы данных на основе Django, формат строки, который работал для этого случая, следующий: @ "yyyy-MM-dd'T'HH: mm: ss.SSSZ" –

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