2011-10-28 16 views
16

Duplicar posibles:
Converting an ISO 8601 timestamp into an NSDate: How does one deal with the UTC time offset?NSDateFormatter no puede analizar a partir de la fecha en formato ISO 8601

utilizo rieles como backend, la salida de fecha predeterminado es 2008-12-29T00: 27: 42-08: 00

Pero después de mi investigación NSDateFormatter no puede apoyarlo, salvo que cambie la fecha a 2008-12-29T00: 27: 42-0800

Aquí está el código que utiliza para analizar la norma ISO 8601 la fecha, pero no hay trabajo

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

¿Alguna idea?

+0

@Ryan Conozco este enlace, solo quiero obtener una mejor solución. – allenwei

+0

¿Encontró una solución para esto? Estoy buscando una solución que pueda proporcionar NSDate o NSString para una fecha formateada como "2008-12-29T00: 27: 42-08: 00". La respuesta aceptada no funciona para mí. La parte problemática es la zona horaria, es decir, "-08: 00". – Mustafa

Respuesta

48

El problema es con la zona horaria al final.

Debe tenerlo como: GMT-0X: 00 o como -0X00 sin separarlo entre horas y minutos.

Los siguientes dos combinaciones funcionan:

Combo 1 - utilizar el formato GMT (GMT-0X: 00) y 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 - Uso formato RFC 822 (-0X00) y 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

Según http://www.w3.org/TR/NOTE-datetime 2008-12-29T00: 27: 42-08: 00 es un formato de fecha válido. Puedo cambiar el formato predeterminado desde el back-end de Rails, pero creo que no es una buena solución. – allenwei

+0

Probé la segunda solución, pero hay algo malo con la zona horaria: "FORMATO DE FECHA: 2008-12-29 08:27:42 +0000". "-0800" convertido en "+0000" – JastinBall

+1

esto devuelve nulo cuando se usa con 2008-12-29T00: 27: 42Z y esto también es ISO8601 http://en.wikipedia.org/wiki/ISO_8601 – AmineG

Cuestiones relacionadas