2016-11-14 111 views
2

我有格式为(MM/DD/YYYY)的日期字段(字符串)来自服务调用。 我的要求是按日期排序清单,并显示最新日期的记录。按日期排列以MM/DD/YYYY排列列表格式

我已经尝试了下面的代码,但我无法显示最新日期的记录。

public class Test { 

     public static void main(String[] args) { 
      List<Opportunity> oppList = new ArrayList<Opportunity>(); 
      Opportunity opp1 = new Opportunity(); 
      opp1.setName("opp1"); 
      opp1.setExpires("11/07/2016"); 
      Opportunity opp2 = new Opportunity(); 
      opp2.setName("opp2"); 
      opp2.setExpires("11/08/2016"); 
      oppList.add(opp1); 
      oppList.add(opp2); 
      List<Opportunity> opplist=sortOpportunitiesByDate(oppList); 
      /*Collections.sort(oppList);*/ 
      for(int i=0; i<opplist.size(); i++){ 
       System.out.println("Opportunity Data>>>"+opplist.get(i).getExpires()); 

      } 

     } 
     private static List<Opportunity> sortOpportunitiesByDate(List<Opportunity> opportunities) { 
       Collections.sort(opportunities, new Comparator<Opportunity>() { 
       public int compare(Opportunity o1, Opportunity o2) { 
        DateFormat format = new SimpleDateFormat("MM/DD/YYYY",Locale.US); 

        Date date1 = null; 
        Date date2 = null; 
        try { 
         date1=format.parse(o1.getExpires()); 
         date2=format.parse(o2.getExpires()); 

        } catch (ParseException e) { 
         e.printStackTrace(); 
        } 

        return date1.compareTo(date2); 
       } 
      }); 

     return opportunities; 
     } 


    } 

实际输出:

Opportunity Date>>>11/07/2016 
Opportunity Date>>>11/08/2016 

预期输出:

Opportunity Date>>>11/08/2016 
Opportunity Date>>>11/07/2016 
+2

日期是一个日期,无论你如何格式化,则需要再进行比较,以便对它进行排序.. –

+1

试使用date2调用compareTo(),并在其中传入date1 –

+0

我也试过这种方式。它不工作 – String

回答

4

因为格式“YYYY”你DateFormat 变化MM/DD/YYYYMM/DD/yyyy将工作

+0

谢谢。现在它正在工作 – String

3

你是从旧到这是确定的更新日期排序, 如果你需要倒挂然后做反转比较标准通过:

return date2.compareTo(date1); 

另一种方式去是inverte排序列表...然后

1排序做Collections.reverse();

编辑:

我试试你的代码,原因是没有很好地定义的格式,因此,日期是错误的

试试这个:

DateFormat format = new SimpleDateFormat("MM/dd/yyyy"); 
Date date1 = null; 
Date date2 = null; 
try { 
     date1 = format.parse(o1); 
     date2 = format.parse(o2); 
} catch (ParseException e) { 
     e.printStackTrace(); 
} 

       return date2.compareTo(date1); 
+0

return date2.compareTo(date1);这也行不通。我试过了 – String

+0

谢谢。现在正在工作 – String

+0

欢迎您 –

1

在java中8,您可以在这样写..

请注意,我使用了apache CompareToBuilder。

Collections.sort(opportunities, 
      Collections.reverseOrder((item1, item2) -> new CompareToBuilder() 
        .append(item1.getExpires(), item2.getExpires()).toComparison()));