我正在开发一个从String中提取日期并将其转换为Date的函数。 日期格式如下:
日 - 月 - 年
其中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)
有什么想法吗?
答案 0 :(得分:4)
不是100%肯定(我会稍等一下),但我认为问题是对于MMM来说,你的月份也必须在适当的地方。因此,如果您在Android上使用意大利语语言环境,那么您的PC上的Sep(可能是设置为EN的区域设置)需要用意大利语表达。 你能试试吗?
答案 1 :(得分:1)
考虑到代码在您的计算机上正常工作,我会怀疑输入字符串中的不可打印字符导致Android上的解析问题。您可以尝试以下方法从解析后的字符串中删除控制字符。
expDate = df.parse(expString.replaceAll("\\p{Cntrl}", ""));
希望这有帮助。
答案 2 :(得分:1)
在创建SimpleDateFormat
:
DateFormat df = new SimpleDateFormat("dd-MMM-yyyy", Locale.ENGLISH);