2012-04-10 12 views
8

He configurado la configuración regional y la zona horaria, pero cuando formateo la fecha, siempre obtengo una fecha no válida. El mes es siempre diciembre y el año es uno menos que el año especificado. En mi caso, no necesito el componente del día.Formateo de mes y año utilizando NSDateFormatter devuelve una fecha no válida

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: Dec 2012

Respuesta

15

formato "AAAA" se utiliza para los calendarios "Semana del año" base. Use el especificador de formato "yyyy" en su lugar:

[dateFormatter setDateFormat:@"MMM yyyy"]; 
+0

Este post explica more.http : //stackoverflow.com/a/8187078/641062 – Vignesh

+0

@Vignesh, gracias por el enlace. Probablemente algunos especificadores de formato no tengan sentido para el calendario de "Semana del año" y eso da como resultado diferentes resultados – Vladimir

+0

Gracias por la información. :) – Vignesh

0

Solo quería agregar algo a la excelente respuesta de Vladimir. Si hace esto antes de configurar su configuración regional, parece que el formateo de la fecha se vuelve loco. Lo que tenía que hacer era establecer la configuración regional antes de establecer el nuevo formato, y luego usar el setDateFormat para cambiar el formato basado en la configuración regional used.So algo como esto haría:

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]; 
+0

Creo que '[formatter setDateStyle: NSDateFormatterShortStyle];' y '[formatter setTimeStyle: NSDateFormatterNoStyle];' son redundantes en su código. Si usa 'setDateFormat', se ignorará la llamada anterior para establecer el estilo de la fecha y el estilo de la fecha. –

+0

@YuchenZhong no lo sabía, la fecha y la hora pensadas se formatearon por separado. Gracias por la respuesta. – Septronic

+0

@YuchenZhong Acabo de editar mi respuesta para reflejar su comentario. – Septronic

Cuestiones relacionadas