Neden NSDateFormatter, ISO 8601 biçiminden tarih ayrıştırılamıyor

Possible Duplicate:
Converting an ISO 8601 timestamp into an NSDate: How does one deal with the UTC time offset?

Rayları arka uç olarak kullanıyorum, varsayılan tarih çıkışı ise 2008-12-29T00: 27: 42-08: 00

Ancak araştırmalarımın ardından NSDateFormatter bunu destekleyemez, ancak 2008-12-29T00: 27: 42-0800

İşte ISO 8601 tarihini ayrıştırmakta kullandığım kod, ama işe yaramıyor

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

Herhangi bir fikir?

16
Bunun için bir çözüm buldunuz mu? NSDate veya NSString'i "2008-12-29T00: 27: 42-08: 00" olarak biçimlendirilmiş bir tarih için sağlayabilecek bir çözüm arıyorum. Kabul edilen cevap benim için çalışmıyor. Sorunlu kısım zaman dilimi yani "-08: 00" dir.
katma yazar Mustafa, kaynak
@Ryan Bu linki biliyorum, sadece daha iyi bir çözüm bulmak istiyorum.
katma yazar allenwei, kaynak

1 cevap

Sorun, saat dilimi sonunda.

GMT-0X: 00 ya da saat ve dakika arasında ayrı olarak -0X00 olarak sahip olmanız gerekir.

Aşağıdaki iki kombinasyon çalışır:

Combo 1 - GMT formatını (GMT-0X: 00) ve ZZZZ kullanın

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 formatını (-0X00) ve ZZZ kullanın

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"]);
48
katma
Benim durumumda şöyle bir şey aldım: "2015-05-07T16: 16: 47.054403Z" Ve kullanmam gerekti: "yyyy" - 'MM' - 'dd'T'HH': 'mm': 'ss. SSSZ"
katma yazar diegomen, kaynak
hızlı sürüm: kod tarih değiştir = "2008-12-29T00: 27: 42-0800" biçimlendiriciye izin ver = NSDateFormatter() formatter.setLocalizedDateFormatFromTemplate ("yyyy-MM-dd'T'H & zwnj; H" : mm: ssZZZ ") final = biçimlendirici.dateFromString (tarih) kodu
katma yazar fatihyildizhan, kaynak
w3.org/TR/NOTE-datetime 'e göre 2008-12-29T00: 27 : 42-08: 00 geçerli bir tarih formatıdır. Varsayılan formatı Rails backend'den değiştirebilirim, ama bence bu iyi bir çözüm değil.
katma yazar allenwei, kaynak
Bu, 2008-12-29T00: 27: 42Z ile kullanıldığında geri döner ve bu da ISO8601'dir. en.wikipedia. org/wiki/ISO_8601
katma yazar AmineG, kaynak
İkinci çözümü denedim ancak saat diliminde yanlışlık var: "DATE ​​FORMAT: 2008-12-29 08:27:42 +0000". "-0800", "+0000" değerine dönüştü
katma yazar JastinBall, kaynak
iso 8601 biçimlendirilmiş tarihin kodunu çözmek için sadece "yyyy-MM-dd'THH: mm: ss.SSSZ" tarih biçimini ayarlayın, büyük "S" milisaniye anlamına gelir
katma yazar Julio Garcia, kaynak