2012-10-01 25 views
6

Tengo un problema con el NSDateFormatter. Está volviendo null para algunas fechas específicas.NSDateFormatter devuelve nulo para fechas específicas

Yo esta función para depurar el caso:

- (void) debugTest:(NSString *)dateStr{ 

    NSLog(@"String: %@", dateStr); 

    NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
    [df setDateFormat:@"yyyy-MM-dd"]; 

    NSDate *dateObj = [df dateFromString: dateStr]; 

    NSLog(@"Date: %@", dateObj); 

} 

Ésta es mi salida de registro para algunas fechas:

String: 2012-10-18 
Date: 2012-10-18 03:00:00 +0000 
String: 2012-10-19 
Date: 2012-10-19 03:00:00 +0000 
String: 2012-10-20 
Date: 2012-10-20 03:00:00 +0000 
String: 2012-10-21 
Date: (null) 
String: 2012-10-22 
Date: 2012-10-22 02:00:00 +0000 
String: 2012-10-23 
Date: 2012-10-23 02:00:00 +0000 

Por qué se vuelve nula sólo para la fecha 2012-10-21?

Me hicieron otras pruebas con el intervalo de 2011-10-01 to 2014-11-01 y las siguientes fechas regresaron null:

2011-10-16, 2012-10-21, 2013-10-20, 2014-10-19 

Es esto una especie de bichos? Estoy haciendo algo mal?

+0

¿Tienes un problema? http://stackoverflow.com/a/4265130/343955 – adarshr

+0

Intenté la solución de la otra pregunta pero no funcionó para mí. Creo que el problema es diferente. – Rafael

+0

El código funciona bien. Es algo fuera de la lista. Espero que esa cadena haya salido del alcance. Por favor publique el resto del código de prueba. – madmik3

Respuesta

4

voy a responder a mi propia pregunta sólo para registrarse en caso de que alguien obtener el mismo problema:

añadí a mi fecha de formateador [df setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]]; Y [df setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];.

lo tanto, mi nuevo código es:

- (void) debugTest:(NSString *)dateStr{ 

    NSLog(@"String: %@", dateStr); 

    NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
    [df setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]]; 
    [df setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]]; 
    [df setDateFormat:@"yyyy-MM-dd"]; 

    NSDate *dateObj = [df dateFromString: dateStr]; 

    NSLog(@"Date: %@", dateObj); 

} 

Creo que el problema estaba relacionado con la configuración del dispositivo, el establecimiento de las dos propiedades arreglaron el problema.

+0

No funcionó para mí. Todavía estoy obteniendo resultados parciales. Algunos valores nulos y alguna cadena de fecha. ¿Cómo pudiste hacerlo funcionar? – AJ112

+0

Hice exactamente lo que publiqué y funcionó para mí. Pero lo hice hace mucho tiempo, así que no sé si en las versiones más recientes de iOS esto todavía funciona, tal vez algo cambió. – Rafael

Cuestiones relacionadas