Estoy usando un NSDateFormatter para analizar una fecha RFC 822 en el iPhone. Sin embargo, no hay forma de especificar elementos opcionales en el formato de fecha. Hay un par de partes opcionales en la especificación RFC 822 que está rompiendo el analizador de fecha. Si nada funciona, probablemente tenga que escribir un analizador personalizado para obedecer las especificaciones.Analizando una fecha RFC 822 con NSDateFormatter
Por ejemplo, el nombre del día es opcional en la especificación. Así pues, estas dos fechas son válidas:
Tue, 01 Dec 2009 08:48:25 +0000
se analice con el formato EEE, dd MMM yyyy HH:mm:ss z
01 Dec 2009 08:48:25 +0000
se analice con el formato dd MMM yyyy HH:mm:ss z
Esto es lo que actualmente estoy usando:
+ (NSDateFormatter *)rfc822Formatter {
static NSDateFormatter *formatter = nil;
if (formatter == nil) {
formatter = [[NSDateFormatter alloc] init];
NSLocale *enUS = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
[formatter setLocale:enUS];
[enUS release];
[formatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss z"];
}
return formatter;
}
+ (NSDate *)dateFromRFC822:(NSString *)date {
NSDateFormatter *formatter = [NSDate rfc822Formatter];
return [formatter dateFromString:date];
}
y el análisis de la fecha como sigue:
self.entry.published = [NSDate dateFromRFC822:self.currentString];
Una forma es intentar ambas formas ats, y toma lo que devuelva un valor no nulo. Sin embargo, hay dos partes opcionales en la especificación (día nombre y segundos) y habría 4 combinaciones posibles. Todavía no está mal, pero es un poco hacky.
Esto parece ser la solución más práctica para mí, dado que los nombres de mes y día son de longitud fija y todos los demás valores son de longitud fija numérica. ¡Mucho más barato que probar formatos hasta que uno funcione! –
Implementado una solución básica. No muy contento con él, pero es el mejor hasta el momento :) Una coma identifica la presencia del día de la semana, y dos puntos ayudan a identificar los segundos. Hubiera sido genial si la fecha incluyera una referencia a la especificación que estaba siguiendo, ya que el análisis de fecha es realmente engorroso en muchos idiomas con la multitud de formatos. – Anurag