2016-01-27 106 views
36

我在一些摩托罗拉设备上有一个非常奇怪的行为,其中LocalDateTime.now()返回0000-00-00T00:00:00.0ThreeTenABP摩托罗拉设备:org.threeten.bp.DateTimeException解析ThreeTen中的日期

的代码如下:

@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()正在返回无效的日期时间并解析失败。

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

+0

也许如本[SO-问题]中所述的相同问题(http://stackoverflow.com/questions/34691990/weird-org-threeten-bp-datetimeexception-抛出),另请参阅我的答案。 –

+0

你放弃了lib吗?这个问题非常烦人。 –

+0

@MenoHochschild感谢相关问题,虽然没有提及摩托罗拉和Android 6出于某种原因,但它看起来非常相似 –

回答

0

使用以下代替

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