2012-01-31 10 views
1

文字列から日付を抽出して日付に変換する関数を開発しています。 MMMは月3桁の名ですべて小文字AndroidのDateFormat:解析不能な日付

dd-mmm-yyyy

: 日付は、次の形式を持っています。

コードの一部は以下の通りです:

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上でどのようなロケールを使用していますか? –

+1

月を小文字にしないとどうなりますか?すなわち、 '2014年9月14日 'の入力としてNPEを取得していますか? – tomtheguvnor

+0

ロケールはイタリアに設定されています。 – Ivan

答えて

4

確かに100%ではありませんが(私は一瞬でチェックします)、問題はMMMの月が適切なロケールでなければならないと思います。 Android上でイタリア語のロケールを使用する場合は、PC上のSep(おそらくENに設定されたロケール)はイタリア語で表現する必要があります。 お試しいただけますか?

+0

O_Oあなた​​は正しいです。それは問題だった!私はそれについて考えなかった。ありがとうたくさん:) – Ivan

+0

@イーバン喜んで私は助けることができる! – wmz

1

あなたのコンピュータでコードが正常に動作していることを考慮すると、入力文字列に印刷できない文字が含まれていると思われます。あなたは、解析された文字列から制御文字を取り除く以下を試すことができますか?

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

これが役立ちます。

+0

これでAndroid上でNullPointerExceptionが発生しました。 – Ivan

1

あなたがSimpleDateFormatを作成するときに英語のロケールを指定してみてください:

DateFormat df = new SimpleDateFormat("dd-MMM-yyyy", Locale.ENGLISH); 
関連する問題