【问题标题】:Date format issue in Android 12Android 12 中的日期格式问题
【发布时间】:2022-10-06 05:52:46
【问题描述】:

以下是解析日期的代码。我用过 \'乔达时间:乔达时间: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 中引发了非法参数异常。当我从英国我们,它开始工作。

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

出乎意料的问题是为什么一个日期正在解析而另一个没有。

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

    标签: android datetime-format date-parsing


    【解决方案1】:

    Android 12 中的实际变化是代码突然变了 失败的?

    早些时候,Locale.UK 中九月的简称是九月但它变成了九月从 Java 16 开始。检查this related thread

    Locale.UK 中的其他短名称没有变化,因此它适用于 Wed Mar 23 14:28:32 +0000 2016 例如。

    现代日期时间 API

    为了完整起见,我想讨论一下现代日期时间 API。可能您一定已经在Home Page of the 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,它会抛出你遇到的同样的错误。然而,如果你改变九月九月并使用Locale.UK,它将起作用。

    了解有关modern Date-Time API 的更多信息,来自Trail: Date Time.

    【讨论】:

      【解决方案2】:
      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 上运行吗?
      • joda.org/joda-time/changes-report.html#a2.11.1 用最新版本更新库。查看更改日志。回答:当我运行你给定的代码时,它给出了一个格式异常的错误,你的日期和时间不正确。
      猜你喜欢
      • 2011-09-20
      • 1970-01-01
      • 2021-10-08
      • 2012-10-23
      • 2013-06-25
      相关资源
      最近更新 更多