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

Возможный дубликат:
Преобразование метки времени ISO 8601 в NSDate: как вы работаете со смещением по времени UTC?

Я использую рельсы в качестве backend, выход по умолчанию - 2008-12-29T00: 27: 42-08: 00

Но после моего исследования NSDateFormatter не может его поддерживать, кроме меня изменить дату до 2008-12-29T00: 27: 42-0800

Вот код, который я использовал для обработки даты ISO 8601, но не работает

NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"];
NSLog(@"%@", [dateFormatter dateFromString:@"2008-12-29T00:27:42-08:00"]);

Любые идеи?

Ответ 1

Проблема связана с часовым поясом на конце.

Вам нужно либо использовать его как: GMT-0X: 00 или как -0X00 без отдельного времени между часами и минутами.

Следующие две комбинации работают:

Комбо 1 - использовать формат GMT (GMT-0X: 00) и ZZZZ

NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZ"];
NSLog(@"DATE FORMAT:%@", [dateFormatter dateFromString:@"2008-12-29T00:27:42GMT-08:00"]);

Combo 2 - используйте формат RFC 822 (-0X00) и ZZZ

dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZ"];
NSLog(@"DATE FORMAT:%@", [dateFormatter dateFromString:@"2008-12-29T00:27:42-0800"]);