我在某些摩托罗拉设备上有一种非常奇怪的行为,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的Motorola设备):
我遇到了这次崩溃:
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 :(得分:1)
请改用以下内容
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MINUTE,10);
Date date = calendar.getTime();
答案 1 :(得分:1)
尝试一下:
SimpleDateFormat类可用于java.util.Date实例。
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String dateString = format.format( new Date() );
Date date = format.parse ( "2009-12-31" );
下面是您可以使用的最常见的图案字母的列表
y = year (yy or yyyy)
M = month (MM)
d = day in month (dd)
h = hour (0-12) (hh)
H = hour (0-23) (HH)
m = minute in hour (mm)
s = seconds (ss)
S = milliseconds (SSS)
z = time zone text (e.g. Pacific Standard Time...)
Z = time zone, time offset (e.g. -0800)
以下是一些模式示例
yyyy-MM-dd (2009-12-31)
dd-MM-YYYY (31-12-2009)
yyyy-MM-dd HH:mm:ss (2009-12-31 23:59:59)
HH:mm:ss.SSS (23:59.59.999)
yyyy-MM-dd HH:mm:ss.SSS (2009-12-31 23:59:59.999)
yyyy-MM-dd HH:mm:ss.SSS Z (2009-12-31 23:59:59.999 +0100)
这可能会为您提供帮助:)
答案 2 :(得分:1)
这是旧的TBP上的一个已知错误:Threetenbp - Date formatting fails on some Android devices 但这已在您使用的ThreeTenABP中解决。
这三行几乎可以告诉大家:
1。
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
2。
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
3。
Caused by org.threeten.bp.DateTimeException: Invalid value for MonthOfYear (valid values 1 - 12): 0
您已经传递了“ 0000-00-00T00:00:00.8”作为参数。
我已经通过使用ZonedDateTime(也建议使用它是最安全的方法,甚至由Google推荐)来解决此问题,而不是使用LocalDateTime。
在ThreeTenABP上执行任何操作之前,还有一个愚蠢的问题。 您是否在Application类中初始化ThreeTenABP?
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
AndroidThreeTen.init(this); // Without this ThreeTenABP cannot work properly
}
}
此外,请勿使用任何其他日期/时间库,因为它们都已弃用,目前仅支持的两个是ThreeTenABP(如果您需要在API 26之前的设备上运行应用程序)和java.time( API 26+),别无其他。不要谈论其他旧库的性能问题。
答案 3 :(得分:0)
尝试:-
$('.date').datetimepicker({'format':'DD/MM/YYYY HH:mm','locale':'fr'});
答案 4 :(得分:0)
您会看到错误消息:“ MonthOfYear的值无效(有效值1-12)” MonthOfYear以零(0)开头。因此,无论您在使用MonthOfYear的哪个地方,都请添加1。这样它将采用正确的格式。
答案 5 :(得分:0)
您可以使用此格式来解析日期 txtldate.setText(Utility.convertMilliSecondsToFormatedDate(leedsModel.getCreatedDateTimeLong(),GLOBAL_DATE_FORMATE));
txtldate是一个编辑文本,也可以是textview,并且GLOBAL_DATE_FORMATE是一个常量,其值为“ dd MMM yyyy”