2012-01-09 9 views
6

tengo un método,NSDateFormatter fecha de regreso incorrecta de cadena

+ (NSDate *) convertToDateFrom:(NSString *) dateString 
{ 
    if (dateString == nil || [dateString isEqual:@""]) return nil; //return nil if dateString is empty 
    NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
     [df setDateFormat:@"EEEE, dd MMMM yyyy HH:mm"]; 

    NSDate *date = [df dateFromString:dateString]; 

    return date; 
} 

Cuando paso,

@"Monday, 21 November 2011 17:01" //Passed string 

Devuelve una fecha equivocada,

2011-11-21 23:14:00 +0000 // Output 

soy no estoy seguro de si estoy usando esos indicadores correctamente o NSDateFormatt er no está convirtiendo correctamente mi cadena a la fecha.

¿Estoy haciendo algo mal?

Gracias

+1

Bueno, para empezar está volviendo la fecha correcta, simplemente el momento equivocado Si realmente se está alimentando a las 17:01 y regresando a las 23:14, probablemente esté mirando el objeto NSDate incorrecto, ya que no hay una configuración razonable de zona horaria que produzca ese desplazamiento. –

Respuesta

12

El +0000 al final de la fecha indica GMT. Todas las fechas se almacenan en relación con GMT; cuando convierte una fecha en una cadena o viceversa usando un formateador de fecha, se incluye el desplazamiento a su zona horaria. Puede usar el método -setTimeZone: de NSDateFormatter para establecer la zona horaria utilizada.

En resumen, no está haciendo nada incorrecto en su código. Use [df stringFromDate:date]; para ver que la fecha sea correcta. (También puede usar NSDate's -descriptionWithCalendarFormat:timeZone:locale:.)

+0

Parece un error cuando le pregunté a descriptionWithLocale, me da un resultado correcto, ¡gracioso! – doNotCheckMyBlog

+1

"descripción" (que se obtiene de forma predeterminada si solo registra el objeto NSDate como un objeto) muestra la hora UTC. –

+0

No puedo obtener la hora exacta, pero la fecha es correcta. Utilizo esta fecha para EkEvent y almaceno el evento en el calendario predeterminado en iPhone. En ese caso, el tiempo no coincide. Por favor, ayúdenme ... – IKKA

-1

Intente configurar el huso horario y la configuración regional.

[df setLocale:[NSLocale currentLocale]]; 
[df setTimeZone:[NSTimeZone systemTimeZone]]; 
+0

Lo intenté pero aún así me devuelve "2011-11-21 23:14:00 +0000" – doNotCheckMyBlog

+2

Si puedo sugerir algo de lectura ligera: http: //developer.apple.com/library/mac/#documentation/Cocoa/ Conceptual/DatesAndTimes/DatesAndTimes.html # // apple_ref/doc/uid/10000039i –

+0

Parece un error cuando le pregunté a descriptionWithLocale que me da el resultado correcto, ¡gracioso! resultado resultado fue diferente entre descripción y descripciónWitLocale ... una diferencia de hora :( – doNotCheckMyBlog

0

intente utilizar

df stringFromDate:date 

Siguiendo trabajado en la mina,

NSLog(@"Date for locale %@: %@", 
     [[dateFormatter locale] localeIdentifier], [df stringFromDate:date]); 

me dio salida como:

Date for locale en_US: Wednesday, 26 June 2013 15:50 
Cuestiones relacionadas