El formatting de mes y año utilizando NSDateFormatter devuelve una date no válida

He configurado la configuration regional y la zona horaria, pero cuando formateo la date, siempre obtengo una date no válida. El mes es siempre diciembre y el año es uno less que el año especificado. En mi caso, no necesito el componente del día.

Revisé otra publicación similar pero no resolvió el problema.

Cualquier ayuda es apreciada. Gracias.

Aquí está el código:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; dateFormatter.locale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease]; dateFormatter.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; [dateFormatter setDateFormat:@"MMM YYYY"]; NSDate *formattedDate = [dateFormatter dateFromString:@"Sep 2013"]; NSLog(@"Date: %@", [dateFormatter stringFromDate:formattedDate]); [dateFormatter release]; dateFormatter = nil; 

SALIDA: Fecha: Dic 2012

El formatting "YYYY" se utiliza para los calendars basados ​​en la "Semana del año". Utilice el especificador de formatting "yyyy" en su lugar:

 [dateFormatter setDateFormat:@"MMM yyyy"]; 

Solo quería agregar algo a la gran respuesta de Vladimir. Si haces esto antes de configurar tu localidad, parece que el formatting de la date se vuelve loco. Lo que tenía que hacer era establecer la configuration regional antes de configurar el nuevo formatting y luego usar setDateFormat para cambiar el formatting según la configuration regional utilizada. Así algo así:

 NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setLocale:[NSLocale currentLocale]];//I wanted to set the locale to wherever user is using my app in [formatter setDateFormat:@"MMM YYYY"]; NSDate *now = [NSDate Date]; NSString *fancyLookingDate = [formatter stringFromDate:now];