Motorola设备:在ThreeTen中parsingdate时出现org.threeten.bp.DateTimeException

在一些摩托罗拉设备上,我有一个非常奇怪的行为, LocalDateTime.now()使用ThreeTenABP返回的是0000-00-00T00:00:00.0

代码如下:

 @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); } 

只有在这些设备上(只有3个摩托罗拉设备运行6.0):

我有这个崩溃:

 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) 

273行是:

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

所以基本上LocaleDateTime.now()返回一个无效的date时间,parsing失败。

另一个有趣的事情是,它只发生在一月初。 任何人都曾经遇到这个问题?

Solutions Collecting From Web of "Motorola设备:在ThreeTen中parsingdate时出现org.threeten.bp.DateTimeException"

改用以下代码

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