2010-02-16 29 views
2

在我的應用程序中,我通過使用SharedPreferences將長出的字符串寫入文件來保存CookieStore。當再次讀取該字符串時,我使用正則表達式從字符串解析每個cookie及其屬性(名稱,值,域,路徑,版本,到期日期)。當我解析這些屬性時,我通過爲每個被解析的cookie創建一個新的BasicClientCookie對象來重新構建一個CookieStore,然後將每個Cookie添加到一個新的CookieStore中。Android中的Cookie解析問題w/date

我的問題來了,當我解析如下到期日:

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的目標是能夠解析到期以下格式日期:有效期:至週五4月2日11點23分38秒PDT 2010]

然而,在OS 2.0以上,期滿日期的格式是不同的:[屆滿:星期五4月2日11時28分21秒美國/洛杉磯2010]

的時區格式在OS 2.0+中有所不同,因此sdf.parse()方法會引發: W/System.err的(10134):java.text.ParseException:無法解析日期:週五4月2日11時35分34秒美國/洛杉磯2010

現在根據this,我可以分析像 「美國/洛杉磯」 時區使用「v」格式說明符。所以我嘗試一個帶有「EEE MMM d HH:mm:ss vvv yyyy」格式字符串的sdf對象,但它不能識別「v」格式說明符。

E/AndroidRuntime(10194):java.lang.IllegalArgumentException異常:未知圖案字符 - 'V' E/AndroidRuntime(10194):在java.text.SimpleDateFormat.validateFormat(SimpleDateFormat.java:379)

我正在構建我的項目w/1.5 SDK,我的Java版本是1.6。我一直無法找出爲什麼「v」格式說明符無法識別。我正在導入java.text.SimpleDateFormat。那是錯的嗎?有沒有人看到更好的方法呢?

回答

4

爲什麼不把這個日期持續到自紀元以來的毫秒,然後將它傳遞到new Date(msecs)

+1

你的意思是我堅持cookie我可以爲每個cookie:cookie.getExpiryDate()。getTime()然後堅持出來作爲一個長期?這似乎是一個很好的方法,我會試試看,謝謝 – jlim

+0

沒錯。日期解析也有相當的開銷,所以應該更快,代碼少:) –

+0

它的工作感謝:) – jlim