2016-09-07 2 views
1

Я столкнулся с очень странной проблемой. Хотя разбор этой строки 2016-09-06 05:18:06.023 PM я получаю следующее исключение - java.text.ParseException: Unparseable date: "2016-09-06 05:18:06.023 PM" (at offset 24)java.text.ParseException: уникальная дата на некоторых устройствах

Weird часть является то, что устройство, на котором произошло это исключение его друга 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) 
+0

Пожалуйста, напишите полный стек - возможно, мы сможем найти код SDF, чтобы узнать, почему :-) – Jan

+0

Добавлена ​​трассировка стека. – Abhilash

ответ

1

Возможно это может повлиять на символы для 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(); 
     } 
+0

Спасибо, ребята. Я дам ему шанс и вернусь с точным решением. Я попробую в обоих направлениях. – Abhilash

Смежные вопросы