Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android上的日期格式:不可解析的日期_Java_Android_Date_Date Format - Fatal编程技术网

Java Android上的日期格式:不可解析的日期

Java Android上的日期格式:不可解析的日期,java,android,date,date-format,Java,Android,Date,Date Format,我正在开发一个函数,从字符串中提取日期并将其转换为日期。 日期的格式如下: 年月日 其中,mmm是月份的三位数名称,全部小写 代码如下所示: if(queryLine.contains("Expiration Date:")){ String expString = queryLine.replace("Expiration Date:", "").trim(); DateFormat df = new SimpleDateFormat("dd-MMM-yyyy"); try { log

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

年月日

其中,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)

有什么想法吗

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

expDate = df.parse(expString.replaceAll("\\p{Cntrl}", ""));
希望这能有所帮助。

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

创建
SimpleDataFormat
时,请尝试指定英语区域设置:

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

你在Android上使用的是什么语言环境?如果你不使用小写,会发生什么?i、 e.您是否仍然得到一个NPE,输入为
14-Sep-2020
?我尝试了expDate=df.parse(“14-Sep-2020”);我仍然收到NPE。现在我在Android上收到一个NullPointerException。你说得对。这就是问题所在!!!我没有想到这一点。非常感谢:)