Я полагаю, что RFC 822 определяет два необязательных компонента в дате и времени: день недели и секунды после часа.
Как взломать, можно по символам на короткие дни недели:
NSArray *shortWeekSymbols = [NSArray arrayWithObjects:@"Sun,", @"Mon,", @"Tue,", @"Wed,", @"Thu,", @"Fri,", @"Sat,", nil];
[formatter setShortWeekdaySymbols:shortWeekSymbols];
Если вы затем измените формат даты на этот: EEEdd MMM yyyy HH:mm:ss z
. Вы сможете анализировать время без дня недели. Похоже, что после запятой тоже есть пробел.
Чтобы быть в безопасности, вы не должны просто слепо устанавливать символы, подобные этим. Вы должны использовать setShortWeekdaySymbols
и перебирать их, добавляя запятую в конце. Причина в том, что они потенциально различны для каждой локали, и первый день может быть не воскресным.
Интересно, что формат EEE, dd MMM yyyy HH:mm:ss z
будет анализировать время без дня недели, но там должна быть запятая, например , 01 Dec 2009 08:48:25 +0000
. Таким образом, вы могли бы сделать что-то, как сказал Стив, но затем обрезать день и перейти к форматирующему. Отсутствие запятой в формате, по-видимому, не позволяет указывать неделю необязательно. Странно.
К сожалению, это по-прежнему не помогает с необязательным: ss в формате. Но это может позволить вам использовать два формата вместо четырех.