Android 5.0 上的 Jodatime 问题

Jodatime issues on Android 5.0

我的应用程序已经运行了一段时间,但在 Android 5.0 发布后,它在 运行 这个版本的设备上崩溃了。 我正在使用 JodaTime 2.6 进行日期处理,正是这个库突然抛出以下异常:

java.lang.IllegalArgumentException:格式无效:“6:06:00 AM”在 "AM"

处格式错误

我已验证我尝试解析的相应字符串具有正确的格式。

更新(这是失败的代码)

 private void doSomething(DateTime time, String timeToParse,int day, int month) {
    DateTimeFormatter fmt = DateTimeFormat.forPattern("h:mm:ss a");
    //Fails here: 
   LocalTime timeFromString = LocalTime.parse(timeToParse,fmt);
}

有人遇到过类似的问题吗?

这可能是一个本地化问题。看来您的默认本地不知道 "AM" 字符串,而是别的东西。

Joda-Time 仅委托给底层 JVM 资源,在您的情况下委托给 Android-资源,这可能会有所不同。为此,Joda-Time 最后使用了 class DateFormatSymbols。请检查您的语言环境和 getAmPmStrings() 的输出以获得正确的诊断。

根据诊断结果,使用 LocalTime.parse(timeToParse, fmt.withLocale(Locale locale)); 帮助显式设置语言环境,或者使用合适形式的字符串输入预处理。