排序JSONObjects的ArrayList无法正常工作

时间:2014-06-02 08:07:40

标签: java sorting jsonobject

我有一个名为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"));
}

1 个答案:

答案 0 :(得分:2)

ss-MMM-yyyy HH:mm:sss应为dd-MMM-yyyy HH:mm:ss

查看此link以及SimpleDateFormat中每个字母的含义,请查看Oracle's documentation