2011-08-18 14 views
6

¿Por qué es esto ...Problema conversión de Ruby on Rails DateTime a NSDate

NSString *mydate = @"2011-07-20T23:59:00-07:00" 

    NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"]; 

    NSLog(@"%@", [[dateFormatter dateFromString:mydate] description]); 

... volver "(null)" en la consola?

Respuesta

13

Su formato de fecha @"yyyy-MM-dd'T'HH:mm:ss'Z'" significa que está buscando un carácter literal "Z" al final de la cadena. Sin embargo, la cadena es:

@"2011-07-20T23:59:00-07:00" 

no veo un "Z" no, ¿verdad? Por lo tanto, la fecha vuelve como nil porque su cadena no coincide con el formato especificado.

De acuerdo con la Date Formatting Patterns documentation, usted está probablemente en busca de la cadena de formato de:

@"yyyy-MM-dd'T'HH:mm:ssZZ" 

Sin embargo, aun que podrían no funcionar, porque si usted nota que su cadena de origen tiene dos puntos (" : ") entre las horas y los minutos del desplazamiento de la zona horaria. No hay un especificador de zona horaria que tenga en cuenta eso. Si ese es realmente el formato en el que ROR devuelve la fecha, entonces ROR está equivocado.

+0

Desafortunadamente, Rails hace exactamente eso ... devolviendo -07: 00 en lugar de -0700. Esto es una mierda Saca el colon y todo está bien. – wgpubs

+1

@wgpubs si eliminó todos los dos puntos, podría usar '@" aaaa-MM-dd'T'HHmmssZZ "' como cadena de formato. –

+0

Fui con algo similar ... eliminando los últimos dos puntos de la cadena (siempre está en la misma posición en relación con la longitud de la cadena). Su solución parece un poco más fácil y directa, así que puedo ir con eso. Gracias – wgpubs

0

Estoy haciendo la transferencia de fechas de Ruby a iOS a través de una API JSON y creo que he leído el mismo artículo.

http://www.cimgf.com/2012/05/29/importing-data-made-easy/

Estoy casi seguro de que se han añadido por error la 'Z' como una cadena literal

-

Para llegar Ruby a la salida como es probable que esté esperando que hice lo siguiente:

1.9.3-p392 :012 > s = Time.now 
    => 2013-05-03 15:47:51 +0100 
1.9.3-p392 :013 > s.strftime("%Y-%m-%d\T%H:%M:%S%:z") 
    => "2013-05-03T15:47:51+01:00" 

Aviso el%: z que está disponible en Ruby 1.9.3 al menos

Is there a Ruby 1.8.7 time.strftime %z bug?