DateFormat на Android: непонятная дата - PullRequest
1 голос
/ 31 января 2012

Я разрабатываю функцию, которая извлекает дату из строки и преобразует ее в дату. Дата имеет следующий формат:

дд-MMM-YYYY

где mmm - трехзначное имя месяца, все в нижнем регистре.

Код выглядит следующим образом:

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)

Есть идеи?

Ответы [ 3 ]

4 голосов
/ 31 января 2012

Не уверен на 100% (я сейчас проверю), но я думаю, что проблема в том, что для МММ ваш месяц тоже должен быть в правильной локали. Так что Sep на вашем ПК (предположительно, языковой стандарт установлен на EN) должен быть выражен на итальянском, если вы используете итальянский языковой стандарт на Android. Не могли бы вы попробовать?

1 голос
/ 31 января 2012

Попробуйте указать английскую локаль при создании SimpleDateFormat:

DateFormat df = new SimpleDateFormat("dd-MMM-yyyy", Locale.ENGLISH);
1 голос
/ 31 января 2012

Учитывая, что код отлично работает на вашем компьютере, я бы заподозрил непечатные символы во входной строке, которые вызывают проблемы с анализом на Android. Можете ли вы попробовать следующее, которое удаляет управляющие символы из проанализированной строки.

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

Надеюсь, это поможет.

...