我面临一个非常奇怪的问题。解析此字符串时2016-09-06 05:18:06.023 PM,出现以下异常-java.text.ParseException: Unparseable date: "2016-09-06 05:18:06.023 PM" (at offset 24)
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
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(); }