В моем приложении я сохраняю CookieStore, записывая его в файл в виде длинной строки, используя SharedPreferences. При чтении этой строки я анализирую каждый файл cookie и его атрибуты (имя, значение, домен, путь, версия, срок действия) из строки, используя регулярные выражения. Когда я анализирую эти атрибуты, я реконструирую CookieStore, создавая новый объект BasicClientCookie для каждого анализируемого cookie, а затем добавляю каждый из них в новый CookieStore.
Моя проблема возникает, когда я анализирую дату истечения срока следующим образом:
CookieStore cs = new CookieStore();
SimpleDateFormat sdf = new SimpleDateFormat( "EEE MMM d HH:mm:ss zzz yyyy" );
//name, value, domain, path, expiry, and version are cookie attribute strings that I have parsed
//for(each cookie)
BasicClientCookie bcc = new BasicClientCookie( name, value );
bcc.setDomain(domain);
bcc.setPath(path);
bcc.setVersion(version);
bcc.setExpiryDate( sdf.parse(expiry) );
cs.addCookie(bcc);
Это прекрасно работает в OS 1.5: объект SimpleDateFormat может анализировать даты истечения срока в следующем формате: [expiry: Fri Apr 02 11:23:38 PDT 2010]
Однако в OS 2.0 и выше даты истечения срока действия форматируются по-разному: [expiry: Fri Apr 02 11:28:21 America / Los_Angeles 2010]
Форматирование часового пояса отличается в OS 2.0+, поэтому метод sdf.parse () выдает:
W / System.err (10134): java.text.ParseException: непарсируемая дата: пт 02 апреля 11:35:34 Америка / Лос-Анджелес 2010
Теперь в соответствии с этим я могу анализировать часовые пояса, такие как "America / Los_Angeles", используя спецификатор формата "v". Поэтому я пробую объект sdf со строкой формата "EEE MMM d HH: mm: ss vvv yyyy", но он не распознает спецификатор формата "v".
E / AndroidRuntime (10194): java.lang.IllegalArgumentException: неизвестный символ шаблона - 'v'
E / AndroidRuntime (10194): по адресу java.text.SimpleDateFormat.validateFormat (SimpleDateFormat.java:379)
Я строю свой проект с 1.5 SDK, и моя версия Java - 1.6. Я не смог выяснить, почему спецификатор формата "v" не распознается. Я импортирую java.text.SimpleDateFormat. Это не тот? Кто-нибудь видит лучший подход к этому?