Appareils Motorola: org.threeten.bp.DateTimeException lors de l’parsing d’une date dans ThreeTen

J’ai un comportement très étrange sur certains appareils Motorola où LocalDateTime.now() renvoie 0000-00-00T00:00:00.0 avec ThreeTenABP .

Le code est le suivant:

 @Override protected void onResume() { super.onResume(); if (!TextUtils.isEmpty(timeout)) { LocalDateTime savedTime = LocalDateTime.parse(timeout, DateTimeFormatter.ISO_DATE_TIME); if (LocalDateTime.now().isAfter(savedTime)) { refresh() } } } @Override protected void onPause() { super.onPause(); LocalDateTime currentTime = LocalDateTime.now().plus(Duration.ofMinutes(10)); timeout = currentTime.format(DateTimeFormatter.ISO_DATE_TIME); } 

Seulement sur ces appareils (seulement 3 appareils Motorola exécutant 6.0):

J’ai ce crash:

 Fatal Exception: java.lang.RuntimeException: Unable to resume activity {com.myapp/com.myapp.MainActivity}: org.threeten.bp.format.DateTimeParseException: Text '0000-00-00T00:00:00.8' could not be parsed: Invalid value for MonthOfYear (valid values 1 - 12): 0 at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3121) at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3152) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1398) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5443) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) Caused by org.threeten.bp.format.DateTimeParseException: Text '0000-00-00T00:00:00.8' could not be parsed: Invalid value for MonthOfYear (valid values 1 - 12): 0 at org.threeten.bp.format.DateTimeFormatter.createError(DateTimeFormatter.java:1559) at org.threeten.bp.format.DateTimeFormatter.parse(DateTimeFormatter.java:1496) at org.threeten.bp.LocalDateTime.parse(LocalDateTime.java:444) at com.myapp.MainActivity.onResume(MainActivity.java:273) at android.app.Activity.performResume(Activity.java:6344) at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3110) at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3152) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1398) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5443) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) Caused by org.threeten.bp.DateTimeException: Invalid value for MonthOfYear (valid values 1 - 12): 0 at org.threeten.bp.temporal.ValueRange.checkValidValue(ValueRange.java:278) at org.threeten.bp.temporal.ChronoField.checkValidValue(ChronoField.java:557) at org.threeten.bp.LocalDate.of(LocalDate.java:237) at org.threeten.bp.chrono.IsoChronology.resolveDate(IsoChronology.java:452) at org.threeten.bp.format.DateTimeBuilder.mergeDate(DateTimeBuilder.java:297) at org.threeten.bp.format.DateTimeBuilder.resolve(DateTimeBuilder.java:206) at org.threeten.bp.format.DateTimeFormatter.parse(DateTimeFormatter.java:1491) at org.threeten.bp.LocalDateTime.parse(LocalDateTime.java:444) at com.myapp.MainActivity.onPostResume(MainActivity.java:273) at android.app.Activity.performResume(Activity.java:6344) at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3110) at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3152) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1398) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5443) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 

La ligne 273 est:

 LocalDateTime savedTime = LocalDateTime.parse(timeout, DateTimeFormatter.ISO_DATE_TIME); 

Donc, en gros, LocaleDateTime.now() renvoie une date et heure incorrecte et l’parsing échoue.

L’autre chose intéressante est que cela n’est arrivé que début janvier. Quelqu’un a déjà rencontré ce problème?

Utilisez plutôt le suivant

 Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.MINUTE,10); Date date = calendar.getTime();