Parsing a RFC 822 date with NSDateFormatter

后端 未结 4 695
逝去的感伤
逝去的感伤 2021-01-04 03:01

I\'m using a NSDateFormatter to parse a RFC 822 date on the iPhone. However, there is no way to specify optional elements in the date format. There are a couple of optional

4条回答
  •  甜味超标
    2021-01-04 03:31

    I've used the following method to parse RFC822 dates. I believe it originally was from MWFeedParser:

    + (NSDate *)dateFromRFC822String:(NSString *)dateString {
    
        // Create date formatter
        static NSDateFormatter *dateFormatter = nil;
        if (!dateFormatter) {
            NSLocale *en_US_POSIX = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
            dateFormatter = [[NSDateFormatter alloc] init];
            [dateFormatter setLocale:en_US_POSIX];
            [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
            [en_US_POSIX release];
        }
    
        // Process
        NSDate *date = nil;
        NSString *RFC822String = [[NSString stringWithString:dateString] uppercaseString];
        if ([RFC822String rangeOfString:@","].location != NSNotFound) {
            if (!date) { // Sun, 19 May 2002 15:21:36 GMT
                [dateFormatter setDateFormat:@"EEE, d MMM yyyy HH:mm:ss zzz"]; 
                date = [dateFormatter dateFromString:RFC822String];
            }
            if (!date) { // Sun, 19 May 2002 15:21 GMT
                [dateFormatter setDateFormat:@"EEE, d MMM yyyy HH:mm zzz"]; 
                date = [dateFormatter dateFromString:RFC822String];
            }
            if (!date) { // Sun, 19 May 2002 15:21:36
                [dateFormatter setDateFormat:@"EEE, d MMM yyyy HH:mm:ss"]; 
                date = [dateFormatter dateFromString:RFC822String];
            }
            if (!date) { // Sun, 19 May 2002 15:21
                [dateFormatter setDateFormat:@"EEE, d MMM yyyy HH:mm"]; 
                date = [dateFormatter dateFromString:RFC822String];
            }
        } else {
            if (!date) { // 19 May 2002 15:21:36 GMT
                [dateFormatter setDateFormat:@"d MMM yyyy HH:mm:ss zzz"]; 
                date = [dateFormatter dateFromString:RFC822String];
            }
            if (!date) { // 19 May 2002 15:21 GMT
                [dateFormatter setDateFormat:@"d MMM yyyy HH:mm zzz"]; 
                date = [dateFormatter dateFromString:RFC822String];
            }
            if (!date) { // 19 May 2002 15:21:36
                [dateFormatter setDateFormat:@"d MMM yyyy HH:mm:ss"]; 
                date = [dateFormatter dateFromString:RFC822String];
            }
            if (!date) { // 19 May 2002 15:21
                [dateFormatter setDateFormat:@"d MMM yyyy HH:mm"]; 
                date = [dateFormatter dateFromString:RFC822String];
            }
        }
        if (!date) NSLog(@"Could not parse RFC822 date: \"%@\" Possibly invalid format.", dateString);
        return date;
    
    }
    

提交回复
热议问题