2011-10-28 16 views
16

Powiel możliwe:
Converting an ISO 8601 timestamp into an NSDate: How does one deal with the UTC time offset?Dlaczego NSDateFormatter nie można analizować datę z ISO 8601

używam szyn jako backend, wyjście domyślna data jest 2008-12-29T00: 27: 42-08: 00

Ale po moich badań NSDateFormatter nie może wspierać go, chyba że zmieni się data 2008-12-29T00: 27: 42-0800

Oto kod użyłem do analizowania ISO 8601 daty, ale to nie działa

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"]); 

jakieś pomysły?

+0

@Ryan Zna ten link, chcę tylko uzyskać lepsze rozwiązanie. – allenwei

+0

Czy znalazłeś rozwiązanie tego problemu? Szukam rozwiązania, które może zapewnić NSDate lub NSString dla daty sformatowanej jako "2008-12-29T00: 27: 42-08: 00". Przyjęta odpowiedź nie działa dla mnie. Problematyczną częścią jest strefa czasowa, tj. "-08: 00". – Mustafa

Odpowiedz

48

Problem dotyczy strefy czasowej na końcu.

Musisz mieć go jako: GMT-0X: 00 lub jako -0X00 bez oddzielnych godzin i minut.

dwóch połączeniach działa:

otwarta 1 - wykorzystanie formatu GMT (GMT-0X: 00) i 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"]); 

otwarta 2 - stosowanie RFC 822 Format (-0X00) i 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"]); 
+1

Zgodnie z http://www.w3.org/TR/NOTE-datetime 2008-12-29T00: 27: 42-08: 00 to prawidłowy format daty. Mogę zmienić domyślny format z Railsowego backendu, ale myślę, że to nie jest dobre rozwiązanie. – allenwei

+0

Próbowałem drugie rozwiązanie, ale w strefie czasowej jest coś nie tak: "DATA FORMAT: 2008-12-29 08:27:42 +0000". "-0800" zamieniony na "+0000" – JastinBall

+1

ten zwraca zero gdy jest używany z 2008-12-29T00: 27: 42Z i jest to również ISO8601 http://en.wikipedia.org/wiki/ISO_8601 – AmineG

Powiązane problemy