【问题标题】:DateFormat format.parse parse exception: Unparseable dateDateFormat format.parse 解析异常:无法解析的日期
【发布时间】:2016-01-20 06:13:00
【问题描述】:

我正在开发一个 android 应用程序,并且在其中一项活动中,我正在根据对象的日期对对象列表进行排序。

我遇到的问题是对象列表按德语区域设置的降序排序。

  • 如果区域设置为英语(英国),则列表将按升序排序。
  • 如果语言环境设置为 German(Deutschland),则列表将按降序排序。

为了对列表进行排序,我使用以下内容:

           Collections.sort(list, new Comparator<Object>() {
                @Override
                public int compare(MyPOJO obj1, MyPOJO obj2) {
                    DateFormat format = new SimpleDateFormat("EE MMM dd HH:mm:ss z yyyy");
                    Date date1, date2;

                    try {
                        date1 = format.parse(obj1.getPubDate());
                        date2 = format.parse(obj2.getPubDate());

                        return date1.compareTo(date2);
                    } catch (ParseException e) {
                        e.printStackTrace();
                    }

                    return 0;
                }
            });  

对于英语,对于一个对象,我有以下日期格式: 2015 年 8 月 13 日星期四 14:50:02 EEST

对于德语,以下内容: 2015 年 8 月 13 日星期四 14:50:02 OESZ

您知道导致这种行为的根本原因是什么,以及解决此问题的方法吗?

【问题讨论】:

  • 首先这甚至不会编译...对象没有getPubDate方法...其次...即使很难说它返回的内容除了它是一个字符串...一些字符串...显然,如果它不是"EE MMM dd HH:mm:ss z yyyy" 格式,format.parse 将抛出异常,compare 将返回 0 ...无论如何,以语言环境格式将数据存储为字符串是自找麻烦
  • 我知道,我只使用它是为了不使用我的应用程序中的那个。我将编辑问题。
  • 我同意塞尔文的观点。更改 getPubDate() 以返回 DateTime 并将其表示为自数据存储中的纪元以来的毫秒。
  • 你的方法奏效了。我使用的是 Date 类型而不是 String,并且不再需要解析发布日期。
  • (在德语中 Thu 应该是 Don 之类的。)

标签: java android arrays sorting simpledateformat


【解决方案1】:

使用字符串编码数据是一种代码味道(称为"Primitive Obsession"

更改 getPubDate() 以返回 Joda DateTime 并将其表示为自您的数据存储中的纪元以来的毫秒。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多