Если вы пытаетесь создать RSS-ридер для любого канала (а не только своего конкретного канала), вам необходимо иметь дело со всеми видами искаженных форматов даты.Несмотря на наличие спецификаций, многие RSS-каналы не следуют им.
Один из подходов состоит в том, чтобы иметь массив форматов даты и перечислять его до тех пор, пока не будет возвращена строка, не равная нулю:
static NSString *sGetDateForString(NSString *inString)
{
static NSArray *sPossibleDateFormats = nil;
if (!sPossibleDateFormats) sPossibleDateFormats = [[NSArray alloc] initWithObjects:
@"EEE, d MMM yyyy HH:mm:ss Z",
@"h:mm a, MMM d, YYYY",
// Add more formats here as you encounter them in the wild
nil];
NSDate *result = nil;
for (NSString *format in sPossibleDateFormats) {
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:format];
result = [dateFormat dateFromString:dateString];
[dateFormat release];
if (result) break;
}
return result;
}
Это будет медленно, но может быть достаточно быстро для вашего приложения.Если вам нужна дополнительная производительность, вы можете попробовать кэшировать индекс соответствующего формата даты и передать его обратно в sGetDateForString () (большинство RSS-каналов будет использовать только один формат даты).