【问题标题】:DateFormat on Android: Unparseable dateAndroid 上的 DateFormat:无法解析的日期
【发布时间】:2012-01-31 12:11:09
【问题描述】:

我正在开发一个从字符串中提取日期并将其转换为日期的函数。 日期格式如下:

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)

有什么想法吗?

【问题讨论】:

  • 您在 Android 上使用什么语言环境?
  • 如果月份不小写会怎样?即你仍然得到一个以14-Sep-2020 作为输入的 NPE 吗?
  • 我试过 expDate = df.parse("14-Sep-2020");我仍然收到 NPE。

标签: java android date date-format


【解决方案1】:

不是 100% 确定(我稍后会检查),但我认为问题在于,对于 MMM,您的月份也必须在正确的语言环境中。因此,如果您在 Android 上使用意大利语语言环境,则 PC 上的 Sep(可能语言环境设置为 EN)需要用意大利语表示。 你能试试吗?

【讨论】:

  • O_O 你是对的。那是问题!我没想到。非常感谢:)
【解决方案2】:

考虑到代码在您的计算机上运行良好,我怀疑输入字符串中的不可打印字符会导致 Android 上的解析问题。您可以尝试以下从解析的字符串中删除控制字符的方法。

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

希望这会有所帮助。

【讨论】:

  • 现在我在 Android 上收到 NullPointerException。
【解决方案3】:

在创建 SimpleDateFormat 时尝试指定英语语言环境:

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

【讨论】:

    猜你喜欢
    • 2016-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-28
    • 1970-01-01
    • 1970-01-01
    • 2018-11-07
    • 1970-01-01
    相关资源
    最近更新 更多