【问题标题】:Best efficient way to sort Months and Year in Java在 Java 中对月份和年份进行排序的最有效方法
【发布时间】:2013-06-24 11:13:44
【问题描述】:

我有一个列表,其中包含格式为 (MON-YYYY) 的字符串格式的日期,我需要对这个列表进行排序。到目前为止我遵循的方法是读取列表并将字符串转换为日期格式并使用比较选项,但我没有得到想要的结果

代码片段

List<String> abc = new ArrayList<String>();
        List<Date> xyz = new ArrayList<Date>();

        abc.add("JAN-2010");
        abc.add("JAN-2011");
        abc.add("APR-2013");
        abc.add("NOV-2009");

        try {

            for (String abc1 : abc) {

                Date date;

                date = new SimpleDateFormat("MMM-yyyy", Locale.ENGLISH)
                        .parse(abc1);
                xyz.add(date);

            }

            Collections.sort(xyz, new Comparator<Date>() {

                public int compare(Date arg0, Date arg1) {
                    // return arg0.getDate().compareTo(o2.getDate());
                    return arg0.compareTo(arg1);
                }
            });

            for (Date date1 : xyz) {
                System.out.println("Sorted : " + date1);
            }

        } catch (ParseException e) {

            e.printStackTrace();

        }
    }

输出

    Sorted : Sun Nov 01 00:00:00 IST 2009
Sorted : Fri Jan 01 00:00:00 IST 2010
Sorted : Sat Jan 01 00:00:00 IST 2011
Sorted : Mon Apr 01 00:00:00 IST 2013

预期输出

NOV-2009
JAN-2010
JAN-2011
APR-2013

我也不确定上述代码在性能方面是否完美,因为如果列表中有数千个 MON-YYYY 格式的日期,转换字符串和解析将需要很长时间。

【问题讨论】:

  • 您将arg0arg0 进行比较,这显然是错误的
  • 请参阅stackoverflow.com/questions/9108719/…,了解如何对日期集合进行排序。
  • 不需要比较器。日期是可比的
  • Darijan,我已经更新了...这是一个拼写错误
  • @SJagdeesh 请在下面查看我的更新答案。

标签: java datetime


【解决方案1】:

好的,我看到你纠正了错字。

现在,请记住,除了在解析数据时,还需要在呈现数据时使用 DateFormatter

所以请试试这个:

        for (Date date1 : xyz) {
            System.out.println("Sorted : " + new SimpleDateFormat("MMM-yyyy", Locale.ENGLISH).format(date1));
        }

您可能希望将SimpleDateFormat 作为字段提供给您的类的所有方法。

附加信息:请注意SimpleDateFormat 不是线程安全的。您可以使用ThreadLocal 作为解决方案。

祝你好运。

【讨论】:

    【解决方案2】:

    您已将 dateString 解析为实际的 Date 对象。而java.util.Date 无法格式化。只能获取该Date 对象的String 表示。

    您需要更改比较器以通过内部将字符串转换为日期来比较您的 dateString 格式。

    如果您要对 Date 对象进行排序,您将获得您所拥有的输出。此外,正如 @darijan 所述,更改比较器中的逻辑。

    【讨论】:

      【解决方案3】:

      首先,我认为最好只有一个 SimpleDateFormat 实例并始终使用它来解析您的日期。
      我还建议在 try 块前面创建 SimpleDateFormat 的这个实例,这样您就可以解决第二个问题,并且可以使用 SimpleDateFormat.format(date) 将您的日期解析回请求的字符串格式。

      【讨论】:

        猜你喜欢
        • 2023-04-01
        • 2018-11-24
        • 2023-01-01
        • 2015-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多