我有一个名为events的JSONArray。我需要按照名为"EVENT_TIME"
的字段按降序对这些事件进行排序。我将事件存储到名为all_events
的ArrayList中,并使用我自己的比较器在其上使用Collections.sort()
。在6个事件中,5个被排序,1个在错误的位置。
我最终得到了:
Acceptance 31-May-2014 10:31:00
Reopened 31-May-2014 10:30:55
Arrived at Pickup Location 31-May-2014 10:30:45
Unloaded from Vessel 31-May-2014 10:30:00
Shipment Create 29-May-2014 00:00:00
Arrive Load Port 30-May-2014 00:00:00
排序后。显然,最后一个是在错误的地方。
存储到arraylist并调用sort:
ArrayList<String>all_events=new ArrayList<String>();
for(int i=0;i<events.length();i++){
JSONObject event=events.getJSONObject(i);
all_events.add(event.toString());
}
Collections.sort(all_events, new JSONComparator());;
JSONComparator类:
class JSONComparator implements Comparator<String>{
public int compare(String a, String b){
String a_time=null;
String b_time=null;
try{
JSONObject event1=new JSONObject(a);
JSONObject event2=new JSONObject(b);
a_time=event1.getString("EVENT_TIME");
b_time=event2.getString("EVENT_TIME");
}
catch(JSONException e){
e.printStackTrace();
}
SimpleDateFormat sdf=new SimpleDateFormat("ss-MMM-yyyy HH:mm:sss");
Date date1=null, date2=null;
try{
date1=sdf.parse(a_time);
date2=sdf.parse(b_time);
}
catch(ParseException pe){
pe.printStackTrace();
}
return date1.compareTo(date2)*-1;
}
};
打印输出:
for(int i=0;i<all_events.size();i++){
JSONObject event=new JSONObject(all_events.get(i));
String s=event.getString("EVENT_CODE");
String eventname=codemap.getString(s);
System.out.println(eventname+" "+event.getString("EVENT_TIME"));
}
答案 0 :(得分:2)
ss-MMM-yyyy HH:mm:sss
应为dd-MMM-yyyy HH:mm:ss
。
查看此link以及SimpleDateFormat中每个字母的含义,请查看Oracle's documentation