【问题标题】:Android ordering list by date using Comparator使用比较器按日期排序的 Android 订单列表
【发布时间】:2016-01-29 20:15:53
【问题描述】:

我有一个包含对象数组列表的数组列表

ArrayList<ArrayList<Object>> arrayLists

每个数组列表都包含一个日期时间字符串对象,我正在尝试将日期时间字符串转换为日期并使用比较器根据最新到最旧的日期重新排序列表,我过去曾成功地使用它重新排序整数,但我似乎缺少重新排序日期时间字符串的内容,我在下面发布了我的代码

            Collections.sort(arrayLists,
                new Comparator<ArrayList<Object>>() {

                    @Override
                    public int compare(ArrayList<Object> a, ArrayList<Object> b) {
                        // TODO Auto-generated method stub

                        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");

                        Date date1, date2;

                        date1 = null;
                        date2 = null;

                        try {

                            date1 = dateFormat.parse((String) a.get(2));
                            date2 = dateFormat.parse((String) b.get(2));

                            Log.d("dateformat", date1.toString() + " " + date2.toString());

                        } catch (ParseException e) {
                            e.printStackTrace();
                        }

                        return Long.compare(date1.getTime(),date2.getTime());
                        //return ((Integer) a.get(0)).compareTo((Integer) b.get(0));

                    }

                });

【问题讨论】:

  • 你能发布一个包含在ArrayList&lt;Object&gt;中的示例数据
  • @Msp 数组列表包含字符串/整数对象,第三个值始终是“yyyy-MM-dd'T'HH:mm:ss”格式的日期时间字符串
  • 这里有什么问题?排序未发生或出现一些异常。发布示例输入和输出。
  • 我用一些示例尝试了你的代码,它工作得非常好。

标签: java android datetime comparator


【解决方案1】:

我认为这里的问题是存储在object.get(2) 中的字符串值。您正在像这样创建解析器,

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");

在这里,解析器会期望像2015-12-12T12:23:34 这样的字符串。如果你传递带单引号的字符串,比如2015-12-12'T'12:23:34,它将不起作用。

所以,从所有字符串中删除单引号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-28
    • 2017-03-19
    • 1970-01-01
    • 2014-09-30
    • 2014-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多