java.text.ParseException: Unparseable date on some devices only(仅在某些设备上出现无法解析的日期)
问题描述
我面临着一个非常奇怪的问题。
解析此字符串2016-09-06 05:18:06.023 PM
时,出现以下异常-java.text.ParseException: Unparseable date: "2016-09-06 05:18:06.023 PM" (at offset 24)
奇怪的是,发生此异常的设备是朋友的Nexus 5。但是,如果我在我的Nexus 5/其他几个仿真器上调试相同的字符串,它工作得很好。
以下是我正在使用的代码。SimpleDateFormat
属于java.text
包。Date
属于java.util
包
SimpleDateFormat formatGMT = new SimpleDateFormat("yyyy-MM-dd KK:mm:ss.SSS a");
formatGMT.setTimeZone(TimeZone.getTimeZone("GMT"));
try {
date = formatGMT.parse("2016-09-06 05:18:06.023 PM");
} catch (ParseException e) {
Crashlytics.log(Log.ERROR, "DB Insertion error", e.getMessage().toString());
Crashlytics.logException(e);
e.printStackTrace();
}
这是完整的堆栈跟踪。
# Crashlytics - plaintext stacktrace Wed, 07 Sep 2016 03:37:44 GMT
# Platform: android
# Bundle Identifier: com.mypackage.app
# Issue #: 306
# Date: 2016-09-06T17:18:04Z
# OS Version: 6.0.1
# Device: Nexus 5
# RAM Free: 36.5%
# Disk Free: 11%
#0. Crashed: pool-3-thread-3: 0 0 0x0000000000000000
at java.text.DateFormat.parse(DateFormat.java:579)
at com.mypackage.app.MyService$16$1.execute(MyService.java:1670)
at io.realm.Realm$1.run(Realm.java:1187)
at io.realm.internal.async.BgPriorityRunnable.run(BgPriorityRunnable.java:34)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
--
Non-fatal Exception: java.text.ParseException: Unparseable date: "2016-09-06 05:18:06.023 PM" (at offset 24)
at java.text.DateFormat.parse(DateFormat.java:579)
at com.mypackage.MyService$16$1.execute(MyService.java:1670)
at io.realm.Realm$1.run(Realm.java:1187)
at io.realm.internal.async.BgPriorityRunnable.run(BgPriorityRunnable.java:34)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
#0. Crashed: pool-3-thread-3: 0 0 0x0000000000000000
at java.text.DateFormat.parse(DateFormat.java:579)
at com.mypackage.MyService$16$1.execute(MyService.java:1670)
at io.realm.Realm$1.run(Realm.java:1187)
at io.realm.internal.async.BgPriorityRunnable.run(BgPriorityRunnable.java:34)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
推荐答案
它可能会受到设备默认区域设置中的am/pm符号的影响,因此请尝试使用下面的区域设置来解析它将对您有帮助的日期。
SimpleDateFormat formatGMT = new SimpleDateFormat("yyyy-MM-dd KK:mm:ss.SSS a", Locale.US);
formatGMT.setTimeZone(TimeZone.getTimeZone("GMT"));
try
{
date = formatGMT.parse("2016-09-06 05:18:06.023 PM");
}
catch (ParseException e)
{
Crashlytics.log(Log.ERROR, "DB Insertion error", e.getMessage().toString());
Crashlytics.logException(e);
e.printStackTrace();
}
这篇关于仅在某些设备上出现无法解析的日期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:仅在某些设备上出现无法解析的日期


基础教程推荐
- 在 Libgdx 中处理屏幕的正确方法 2022-01-01
- Java:带有char数组的println给出乱码 2022-01-01
- Java Keytool 导入证书后出错,"keytool error: java.io.FileNotFoundException &拒绝访问" 2022-01-01
- 无法使用修饰符“public final"访问 java.util.Ha 2022-01-01
- FirebaseListAdapter 不推送聊天应用程序的单个项目 - Firebase-Ui 3.1 2022-01-01
- 降序排序:Java Map 2022-01-01
- 设置 bean 时出现 Nullpointerexception 2022-01-01
- “未找到匹配项"使用 matcher 的 group 方法时 2022-01-01
- 减少 JVM 暂停时间 >1 秒使用 UseConcMarkSweepGC 2022-01-01
- 如何使用 Java 创建 X509 证书? 2022-01-01