提问人:Rohan Patel 提问时间:9/6/2022 最后编辑:AnonymousRohan Patel 更新时间:10/7/2022 访问量:817
Android 12 中的日期格式问题
Date format issue in Android 12
问:
以下是解析日期的代码。我使用了'joda-time:joda-time:2.9.9'库作为格式化程序。
String date = "Sun Sep 04 17:29:52 +0000 2022";
DateTimeFormatter dateFormat = DateTimeFormat.forPattern("EEE MMM dd HH:mm:ss Z
yyyy").withLocale(Locale.UK);
dateFormat.parseDateTime(date);
上面的代码在 Android 12 中抛出 illegelArgument 异常。当我将语言环境从英国更改为美国时,它开始工作。
但奇怪的是,如果我尝试使用上述代码解析 Wed Mar 23 14:28:32 +0000 2016 这个日期,它在所有操作系统中都可以使用。
心不在焉的问题是为什么一个日期被解析而另一个日期没有。
Android 12 中实际发生了什么变化,导致代码突然失败?
答:
import java.text.SimpleDateFormat;
import java.util.Locale;
Locale locale = new Locale("bd", "bn");
String pattern = "EEEEE MMMMM yyyy HH:mm:ss.SSSZ";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern, locale);
String date = simpleDateFormat.format(System.currentTimeMillis());
System.out.println("DateTime :: " + date);
评论
Android 12 中实际发生了哪些变化,代码突然变得 失败?
早些时候,September 的简称是 Sep,但从 Java 16 开始改为 September。检查此相关线程。Locale.UK
中的其他短名称没有变化,因此它适用于 Wed Mar 23 14:28:32 +0000 例如,2016。Locale.UK
新式日期时间 API
为了完整起见,我想讨论一下现代日期时间 API。您可能已经在 Joda-Time API 的主页上看到了以下注释:
请注意,从 Java SE 8 开始,用户被要求迁移到 java.time (JSR-310) - JDK 的核心部分,它取代了它 项目。
使用新式日期时间 API 进行演示:
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
String strDateTime = "Sun Sep 04 17:29:52 +0000 2022";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss Z yyyy", Locale.ROOT);
OffsetDateTime zdt = OffsetDateTime.parse(strDateTime, formatter);
System.out.println(zdt);
}
}
输出:
2022-09-04T17:29:52Z
请注意,我在演示中使用了。如果您使用 ,它将抛出与您相同的错误。但是,如果您将 Sep 更改为 September 并使用 ,它将起作用。Locale.ROOT
Locale.UK
Locale.UK
从 Trail: Date Time 了解有关新式日期时间 API 的更多信息。
评论