2010-11-14 18 views
8

He pasado demasiado tiempo (más de una hora) en lo que pensé que sería una tarea de dos minutos. En el iPhone:Convertir ex. 2010-09-11T00: 00: 00 + 01: 00 formato a NSDate

NSString * dateString = @"2010-09-11T00:00:00+01:00"; 
NSDateFormatter * formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"YYYY-MM-dd'T'HH:mm:ssTZD"]; 
NSDate *date = [formatter dateFromString:dateString]; 

RESULTADO: Fecha == nil

¿Qué me falta !! (Además de mi fecha límite)

Saludos,

Ken

+0

jaja, he publicado exactamente la misma pregunta hace 10min: http://stackoverflow.com/questions/4179993 – samvermette

Respuesta

12

TZD no es un formateador definido por the unicode spec. El documento al que se ha vinculado en otro lugar fue una sugerencia que alguien hizo al W3C, solo para discusión. El estándar Unicode seguido por Apple es un estándar terminado, de un cuerpo diferente.

Lo más parecido a lo que desea sería ZZZ (es decir, @ "AAAA-MM-dd'T'HH: mm: ssZZZ"), pero eso no tiene dos puntos en el medio. Así que había necesidad de utilizar la cadena:

2010-09-11T00:00:00+0100 

En lugar de la que actualmente tiene que termina en 01: 00.

E.g. lo siguiente:

NSString * dateString = @"2010-09-11T00:00:00+0100"; 
NSDateFormatter * formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"YYYY-MM-dd'T'HH:mm:ssZZZ"]; 
NSDate *date = [formatter dateFromString:dateString]; 
NSLog(@"%@", date); 

Registra un objeto de fecha válido, de 2010-09-10 23:00:00 GMT.

+0

Gracias por eso. Como estoy obteniendo códigos de tiempo en dos formatos ... + 01:00 AND ... Z ie 2010-09-11T00: 00: 00Z, solo tuve que agregar quitar los dos puntos del código de tiempo +00: 00 y verificar Z en el caso de que no estuviera presente y cambie el código a YYYY-MM-dd'T'HH: mm: ssZ en ese caso. - Frase confusa, pero es tarde, estoy cansado ... ¡Gracias! – gnasher

2

Consejo: intenta utilizar el formateador para convertir de un objeto NSDate a una cadena, a continuación, ver lo que hay. A menudo es más fácil depurar en esa dirección que en la otra.

¿Has leído esto?

http://unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns

Eso TZD al final de su cadena de formato se parece un poco fiable.

+0

TZD es el designador de zona horaria. Ver: http://www.w3.org/TR/NOTE-datetime – gnasher

+0

Ese es un estándar diferente del que usa NSDateFormatter. Eche un vistazo al enlace de unicode.org. –

-1

He resuelto este problema usando el código this.

+1

¿Qué código ???? Enlaces rompen. – Brett

Cuestiones relacionadas