2013-01-22 3 views
15

私はソートの仕方Javaで文字列形式の日付ですか?

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"); 

のような文字列値を持つarraylistすべてのボディは、上記のリストを並べ替えで私を助けることができる持っていますか?その値は、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; 
+0

大きな問題に文字列を解析するために持っていけません! –

答えて

51

のようなものは、おそらくあなたが比較するためにカスタムコンパレータを書くことができ、この

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); 
      } 
     } 
    }); 

またはJava 8

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy '@'hh:mm a"); 
    Collections.sort(datestring, (s1, s2) -> LocalDateTime.parse(s1, formatter). 
      compareTo(LocalDateTime.parse(s2, formatter))); 
+0

ありがとう、これは私のシナリオに完璧に働いてくれてありがとう.. – user1740005

+0

ありがとうございました... +1 – vicky

+0

私の文字列には時間がありません。形式はyyyy-MM-ddです。上記の方法でソートしようとすると、リストは同じままです。助けてください。 – Aradhna

0

を試してみてください日付文字列とその要件に基づく注文。次に、実装されたコンパレータを使用してコレクションをソートすることができます。

2

あなたの問題を回避する技術的な方法がありますが、基本的な間違いは、DateStringのように '原始的な強迫観念'の形で表すことです。 テキスト入力がある場合は、java.util.Dateまたは適切なjodaクラスに変換してください(LocalDateTimeが適切です)。これらのクラスはそのままComparableを実装しており、並べ替えは簡単です。しかし、彼らはまた、あなたが日付/時刻インスタンスを操作するときに必要とするであろうボード上の他のすべてのロジックも持っています。

0

1つのオプションは、書式設定されていない日付をキーとして、フォーマットされた日付を値としてTreeMapに日付を追加することです。 TreeMapを使用すると、値が自動的にソートされます。

private ArrayList<String> sortDates(ArrayList<String> dates) throws ParseException { 
    SimpleDateFormat f = new SimpleDateFormat("dd MMM yyyy"); 
    Map <Date, String> dateFormatMap = new TreeMap<>(); 
    for (String date: dates) 
     dateFormatMap.put(f.parse(date), date); 
    return new ArrayList<>(dateFormatMap.values()); 
} 
0

文字列形式の日付のリストを下記のcompareToを使用して比較することができます。これを使用することにより

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"); 

Collections.sort(datestring, new Comparator<String>() { 
       @Override 
       public int compare(String object1, String object2) { 
        return object1.compareTo(object2); 
       } 
      }); 

あなたも、日付

関連する問題