2013-01-22 46 views
15

我有一個字符串值的arraylist如何排序在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"); 

任何機構可以幫助我在整理上面的列表?這樣就可以根據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

雖然有一種技術方法可以解決您的問題,但基本錯誤是將Date s表示爲String s,這是一種「原始迷戀」形式。 如果您有文字輸入,請將其轉換爲java.util.Date或適當的joda類(LocalDateTime似乎適用於此處)。這些類開箱即用地實現了Comparable,並且很容易對它們進行排序。但是他們在處理日期/時間實例時也有可能需要的所有其他邏輯,而字符串則不需要。

0

一種方法是將日期添加到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); 
       } 
      }); 

利用這一點,你甚至不必須字符串解析成日期

相關問題