Sto utilizzando un NSDateFormatter per analizzare una data RFC 822 su iPhone. Tuttavia, non è possibile specificare elementi facoltativi nel formato data. Ci sono un paio di parti opzionali nella specifica RFC 822 che sta rompendo l'analizzatore di date. Se non funziona niente, probabilmente dovrei scrivere un parser personalizzato per obbedire alle specifiche.Analisi di una data RFC 822 con NSDateFormatter
Ad esempio, il nome del giorno è opzionale nelle specifiche. Quindi sono valide entrambe queste date:
Tue, 01 Dec 2009 08:48:25 +0000
viene analizzato con il formato EEE, dd MMM yyyy HH:mm:ss z
01 Dec 2009 08:48:25 +0000
viene analizzato con il formato dd MMM yyyy HH:mm:ss z
Questo è quello che sono attualmente in uso:
+ (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];
}
E analizzando la data segue:
self.entry.published = [NSDate dateFromRFC822:self.currentString];
Un modo è provare entrambe le forme ats e accetta qualunque valore non nullo. Tuttavia, ci sono due parti opzionali nella specifica (nome del giorno e secondi) e ci sarebbero 4 possibili combinazioni. Ancora non male, ma è un po 'hacky.
Questa mi sembra la soluzione più pratica, dato che i nomi del mese e del giorno sono di lunghezza fissa e tutti gli altri valori sono numerici a lunghezza fissa. Molto più economico che provare i formati fino a quando uno funziona! –
Implementata una soluzione di base. Non è molto soddisfatto, ma è il migliore finora :) Una virgola identifica la presenza del giorno della settimana e due punti aiutano a identificare i secondi. Sarebbe stato bello se la data includesse un riferimento alle specifiche che stava seguendo, dato che l'analisi delle date è davvero complicata in molte lingue con la moltitudine di formati. – Anurag