Usando NSDateFormatter para fechas del estilo de las de un RSS

Para una de mis primeras apps, necesité convertir una cadena de fecha con el formato que tienen en los RSS, como "Sat, 08 May 2010 11:36:56 +0200" a un formato más corto, y en castellano. Formatearlo es fácil:

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss Z"];
NSDate *date = [dateFormat dateFromString: rssdatetoformat];
dateFormat.locale = [[[NSLocale alloc] initWithLocaleIdentifier:@"es_ES"] autorelease]; [dateFormat setDateFormat:@"EEEE, d MMMM yyyy"];
NSString *dateString = [dateFormat stringFromDate:date];
[dateFormat release];

Creo el formateador, le damos el formato y el idioma, pero no sale bien, siempre ignora el idioma y nos da una fecha formateada en inglés, no entendía que estaba pasando. Cuando creamos la fecha desde la cadena del RSS, el formateador no solo necesita saber cual es el formato de la cadena ("EEE, dd MMM yyyy HH:mm:ss Z"), también necesita saber que esa cadena está con el localizador de idioma "en_US". Con este truco, la cadena de fecha RSS es formateada corréctamente en castellano a un formato de fecha más corto:

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
dateFormat.locale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease];
[dateFormat setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss Z"];
NSDate *date = [dateFormat dateFromString: rssdatetoformat];
dateFormat.locale = [[[NSLocale alloc] initWithLocaleIdentifier:@"es_ES"] autorelease];
[dateFormat setDateFormat:@"EEEE, d MMMM yyyy"];
NSString *dateString = [dateFormat stringFromDate:date];
[dateFormat release];

Deja un comentario
He leido y acepto la Política de Privacidad

Los comentarios enviados por cada usuario serán siempre visibles en el post correspondiente, y no serán utilizados para ningún otro fin. El usuario tiene derecho a acceder, rectificar y suprimir dichos comentarios, tal como se refleja en nuestra Política de Privacidad