2012-01-31 59 views
1

我正在開發一個函數,它從String中提取日期並將其轉換爲Date。 日期的格式如下:Android上的DateFormat:解析日期

dd-mmm-yyyy

其中mmm是一個月3位數的名稱,所有小寫。

的一段代碼如下:

if(queryLine.contains("Expiration Date:")){ 
String expString = queryLine.replace("Expiration Date:", "").trim(); 
DateFormat df = new SimpleDateFormat("dd-MMM-yyyy"); 
try { 
    log.info("Exp: " + queryLine.replace("Expiration Date:", "").trim()); 
    expDate = df.parse(expString); 
} catch (ParseException e) {       
    e.printStackTrace(); 
}     

如果我嘗試在電腦上JVM的代碼,它工作正常,它的日期轉換沒有問題,但如果我嘗試在Android上我有運行出現以下錯誤:

java.text.ParseException: Unparseable date: "14-sep-2020" 
    at org.whoislibrary.servers.WhoisCom.parseResponse(WhoisCom.java:39) 
    at java.text.DateFormat.parse(DateFormat.java:626) 
    at org.whoislibrary.WhoisAbstract.executeQuery(WhoisAbstract.java:47) 
    at org.whoislibrary.WhoisCommand.executeQuery(WhoisCommand.java:72) 
    at org.HttpTest.HttpTestActivity.onCreate(HttpTestActivity.java:35) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1586) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1638) 
    at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:928) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:123) 
    at android.app.ActivityThread.main(ActivityThread.java:3647) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:507) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
    at dalvik.system.NativeStart.main(Native Method) 

任何想法?

+4

你在Android上使用的語言環境? – 2012-01-31 12:16:52

+1

如果您不小寫月份,會發生什麼?即,您是否仍以「2020年9月14日」作爲輸入獲得NPE? – tomtheguvnor 2012-01-31 12:17:41

+0

它的語言環境設置爲意大利。 – Ivan 2012-01-31 12:26:10

回答

4

不是100%確定(我會稍後檢查),但我認爲問題在於,對於MMM,您的月份也必須在正確的語言環境中。因此,如果您在Android上使用意大利語言環境,則您的PC上的Sep(假設語言環境設置爲EN)將需要用意大利語表示。 你可以試試嗎?

+0

O_O你是對的。這是問題!我沒有想到這一點。非常感謝:) – Ivan 2012-01-31 12:54:58

+0

@伊萬很高興我能幫忙! – wmz 2012-01-31 13:22:01

1

考慮到代碼在您的計算機上正常工作,我會懷疑您的輸入字符串中會導致Android上的解析問題的不可打印字符。你可以嘗試下面這個從解析的字符串中刪除控制字符的東西。

expDate = df.parse(expString.replaceAll("\\p{Cntrl}", "")); 

希望這會有所幫助。

+0

現在我在Android上收到一個NullPointerException。 – Ivan 2012-01-31 12:41:33

1

嘗試指定的英語語言環境中,當您創建SimpleDateFormat

DateFormat df = new SimpleDateFormat("dd-MMM-yyyy", Locale.ENGLISH);