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