Parsing a RFC 822 date with NSDateFormatter

后端 未结 4 670
逝去的感伤
逝去的感伤 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条回答
  •  -上瘾入骨i
    2021-01-04 03:06

    I believe RFC 822 specifies two optional components in the date time: day of week and the seconds past the hour.

    As a hack, it is possible to the symbols for the short days of the week:

    NSArray *shortWeekSymbols = [NSArray arrayWithObjects:@"Sun,", @"Mon,", @"Tue,", @"Wed,", @"Thu,", @"Fri,", @"Sat,", nil];
            [formatter setShortWeekdaySymbols:shortWeekSymbols];
    

    If you then change the date format to this: EEEdd MMM yyyy HH:mm:ss z. You'll be able to parse times with about without the day of the week. This seems to allow a space after the comma too.

    To be safe you should not just blindly set the symbols like this. You should get using setShortWeekdaySymbols and iterate over them adding the comma at the end. The reason being they are potentially different for each locale and the first day might not be Sunday.

    Interestingly the format EEE, dd MMM yyyy HH:mm:ss z will parse times without the day of week, but the comma must be there, for example , 01 Dec 2009 08:48:25 +0000. Therefore, you could do something like Steve said but then strip off the day and pass though to the formatter. Not having the comma in the format does not seem to allow the week to be optional. Strange.

    Unfortunately, this still doesn't help with the optional :ss in the format. But it might allow you to have two formats rather than four.

提交回复
热议问题