Android 12 中的日期格式问题

Date format issue in Android 12

提问人:Rohan Patel 提问时间:9/6/2022 最后编辑:AnonymousRohan Patel 更新时间:10/7/2022 访问量:817

问:

以下是解析日期的代码。我使用了'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 中实际发生了什么变化,导致代码突然失败?

android datetime-format 日期解析 android-jodatime

评论


答:

-1赞 S.m. Kamal Hussain Shahi 9/6/2022 #1
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);

评论

0赞 Rohan Patel 9/6/2022
你能告诉我为什么上面的代码在Android 12上不起作用吗?
0赞 S.m. Kamal Hussain Shahi 9/6/2022
joda.org/joda-time/changes-report.html#a2.11.1 使用最新版本更新库。请参阅更改日志。答:当我运行您给定的代码时,它会给出一个错误,这是一个格式异常,您的日期和时间不正确。
1赞 Arvind Kumar Avinash 10/6/2022 #2

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.ROOTLocale.UKLocale.UK

Trail: Date Time 了解有关新式日期时间 API 的更多信息。