40

次のarraylistような文字列値があります

ArrayList<String> datestring=new ArrayList<String>();
datestring.add("01/21/2013 @03:13 PM");
datestring.add("01/21/2013 @04:37 PM");
datestring.add("01/21/2013 @10:41 AM");
datestring.add("01/21/2013 @10:48 AM");
datestring.add("01/22/2013 @06:16 AM");
datestring.add("01/22/2013 @06:19 AM");
datestring.add("01/21/2013 @05:19 PM");
datestring.add("01/21/2013 @05:19 PM");

上記のリストの並べ替えを手伝ってくれる人はいますか? 値が AM および PM 形式に従ってソートされるようにします。
並べ替え後の期待される出力は次のようになります。

for (String s : datestring)
{
    System.out.println(s);
}

.

01/21/2013 @10:41 AM;
01/21/2013 @10:48 AM;
01/21/2013 @03:13 PM;
01/21/2013 @04:37 PM;
01/21/2013 @05:16 PM;
01/21/2013 @05:19 PM;
01/22/2013 @06:16 AM;
01/22/2013 @06:19 AM;
4

7 に答える 7

97

これを試して

    Collections.sort(datestring, new Comparator<String>() {
        DateFormat f = new SimpleDateFormat("MM/dd/yyyy '@'hh:mm a");
        @Override
        public int compare(String o1, String o2) {
            try {
                return f.parse(o1).compareTo(f.parse(o2));
            } catch (ParseException e) {
                throw new IllegalArgumentException(e);
            }
        }
    });

またはJava8を使用

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy '@'hh:mm a");
    Collections.sort(datestring, (s1, s2) -> LocalDateTime.parse(s1, formatter).
            compareTo(LocalDateTime.parse(s2, formatter)));
于 2013-01-22T05:33:57.700 に答える
3

問題を回避する技術的な方法はありますが、基本的な間違いはDates を s として表現Stringすることであり、これは「原始的な強迫観念」の一種です。テキスト入力がある場合はjava.util.Date、適切な joda クラス (LocalDateTimeここでは適切と思われます) に変換します。これらのクラスはすぐに実装Comparableでき、並べ替えは簡単です。ただし、日付/時刻インスタンスを操作するときに必要になる可能性が高い他のすべてのロジックも搭載されていますが、文字列にはありません。

アップデート

Java 8 以降、代わりにLocalDateTimeクラスを使用することを強くお勧めします。

于 2013-01-22T06:03:14.877 に答える
0

デフォルトでは、ArrayList はソートをサポートしていません。使用できます

public static <T> void sort(List<T> list, Comparator<? super T> c)java.util.Collectionsクラスから。コンパレータの実装を渡して、日付をソートします。

http://www.coderanch.com/t/392338/java/java/compare-Dates-String-Format

于 2013-01-22T05:30:57.640 に答える
-1

おそらく、要件に基づいて日付文字列と順序を比較するカスタム コンパレータを作成できます。次に、実装されたコンパレータを使用してコレクションを並べ替えることができます。

于 2013-01-22T05:37:58.680 に答える