4

文字列形式 (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 形式の日付が何千もある場合、文字列の変換と解析に時間がかかるため、上記のコードがパフォーマンスの観点から完璧であるかどうかもわかりません。

4

3 に答える 3

6

わかりました、タイプミスを修正しました。

DateFormatterここで、データを解析するときだけでなく、データを表示するときにもa を使用する必要があることを思い出してください。

だからこれを試してください:

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

SimpleDateFormatクラスのすべてのメソッドで をフィールドとして使用できるようにしたい場合があります。

SimpleDateFormat追加情報:はスレッドセーフではないことがわかっていることに注意してください。ThreadLocalそのための1つのソリューションとしてご利用いただけます。

幸運を。

于 2013-06-24T11:17:54.817 に答える
1

dateString実際のDateオブジェクトに解析しました。そしてjava.util.Date、フォーマットできません。Stringそのオブジェクトの表現のみをDate取得できます。

dateString文字列を内部で日付に変換してフォーマットを比較するには、コンパレータを変更する必要があります。

オブジェクトを並べ替える場合Dateは、取得した出力が得られます。また、@darijanで述べたように、コンパレータのロジックを変更してください。

于 2013-06-24T11:17:23.033 に答える