我的日期字段(字符串)格式(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
答案 0 :(得分:4)
因为DateFormat
格式为“YYYY”
将MM/DD/YYYY
更改为MM/DD/yyyy
将有效
答案 1 :(得分:3)
您正在从较旧的日期到较新的日期排序,这是好的, 如果你需要颠倒,那么通过这样做来反转比较标准:
return date2.compareTo(date1);
另一种方法是将排序列表变为...
第一种然后执行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);
答案 2 :(得分:1)
在java 8中,你可以用这种方式编写它。
请注意我已经使用了apache CompareToBuilder。
Collections.sort(opportunities,
Collections.reverseOrder((item1, item2) -> new CompareToBuilder()
.append(item1.getExpires(), item2.getExpires()).toComparison()));