Android 12中的日期格式问题



下面是解析日期的代码。我使用了'joda time:joda time:22.9.9'lib作为格式化程序。

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中引发了非法参数异常。当我将区域设置从英国更改为美国时,它开始工作。

但奇怪的是,如果我试图用上面的代码解析2016年3月23日星期三14:28:32+0000这个日期,它在所有操作系统中都可以工作。

令人费解的问题是,为什么一个日期得到了解析,而另一个却没有。

安卓12到底发生了什么变化,代码突然失效了?

Android 12中的实际变化是什么,代码突然变得失败?

早些时候,Locale.UK中九月的短名称为Sep,但从Java 16开始,它被更改为

SepLocale.UK中的其他短名称没有变化,因此它适用于2016年3月23日星期三14:28:32+0000。

现代日期时间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

请注意,我在演示中使用了Locale.ROOT。如果您使用Locale.UK,它将抛出与您得到的错误相同的错误。但是,如果将Sep更改为9t并使用Locale.UK,它将起作用。

跟踪:日期时间了解有关现代日期时间API的更多信息。

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);

相关内容

  • 没有找到相关文章

最新更新