如何按降序排序日期从Android中的Arraylist日期?

我有一个存储DateArrayList ,我按降序排序。 现在我想在ListView显示它们。 这是我到目前为止所做的:

  spndata.setOnItemSelectedListener(new OnItemSelectedListener() { public void onItemSelected(AdapterView arg0, View arg1, int position, long arg3) { switch (position) { case 0: list = DBAdpter.requestUserData(assosiatetoken); for (int i = 0; i < list.size(); i++) { if (list.get(i).lastModifiedDate != null) { lv.setAdapter(new MyListAdapter( getApplicationContext(), list)); } } break; case 1: list = DBAdpter.requestUserData(assosiatetoken); Calendar c = Calendar.getInstance(); SimpleDateFormat df3 = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a"); String formattedDate3 = df3.format(c.getTime()); Log.v("log_tag", "Date " + formattedDate3); for (int i = 0; i < list.size(); i++) { if (list.get(i).submitDate != null) { String sDate = list.get(i).submitDate; SimpleDateFormat df4 = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a"); String formattedDate4 = df4.format(sDate); Map dateMap = new TreeMap(new Comparator(){ public int compare(Date formattedDate3, Date formattedDate4) { return formattedDate3.compareTo(formattedDate4); } }); lv.setAdapter(new MyListAdapter( getApplicationContext(), list)); } } break; case 2: break; case 3: break; default: break; } } public void onNothingSelected(AdapterView arg0) { } }); 

    创建Date类的Arraylist 。 并使用Collections.sort()升序。

    请参阅sort(List 列表)

    根据元素的自然顺序,将指定列表按升序排序。

    对于按降序排序请参阅Collections.reverseOrder()

     Collections.sort(yourList, Collections.reverseOrder()); 

    在案例1中添加如下:像这样

      case 0: list = DBAdpter.requestUserData(assosiatetoken); Collections.sort(list, byDate); for (int i = 0; i < list.size(); i++) { if (list.get(i).lastModifiedDate != null) { lv.setAdapter(new MyListAdapter( getApplicationContext(), list)); } } break; 

    并将此方法放在您class级的最后

     static final Comparator byDate = new Comparator() { SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a"); public int compare(All_Request_data_dto ord1, All_Request_data_dto ord2) { Date d1 = null; Date d2 = null; try { d1 = sdf.parse(ord1.lastModifiedDate); d2 = sdf.parse(ord2.lastModifiedDate); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } return (d1.getTime() > d2.getTime() ? -1 : 1); //descending // return (d1.getTime() > d2.getTime() ? 1 : -1); //ascending } }; 

    您正在使用的日期compareTo()将用于升序。

    要进行降序,只需反转compareTo()的值即可。 您可以使用单个Comparator类,该类在构造函数中接收标记排序顺序的标志/枚举

     public int compare(MyObject lhs, MyObject rhs) { if(SortDirection.Ascending == m_sortDirection) { return lhs.MyDateTime.compareTo(rhs.MyDateTime); } return rhs.MyDateTime.compareTo(lhs.MyDateTime); } 

    您需要调用Collections.sort()来实际排序列表。

    作为旁注,我不确定为什么要在for循环中定义地图。 我不确定您的代码尝试做什么,但我假设您希望将for循环中的索引值填充到地图中。

    如果字符串格式的日期将其转换为每个对象的日期格式:

     String argmodifiledDate = "2014-04-06 22:26:15"; SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { this.modifiledDate = format.parse(argmodifiledDate); } catch (ParseException e) { e.printStackTrace(); } 

    然后按降序对arraylist进行排序:

     ArrayList lstDocument= this.objDocument.getArlstDocuments(); Collections.sort(lstDocument, new Comparator() { public int compare(Document o1, Document o2) { if (o1.getModifiledDate() == null || o2.getModifiledDate() == null) return 0; return o2.getModifiledDate().compareTo(o1.getModifiledDate()); } }); 

    DateComparable所以只需创建List并使用Collections.sort()对其进行排序。 并使用Collections.reverseOrder()来获得reverse ordering比较器。

    来自Java Doc

    返回一个比较器,它强制指定比较器的反向排序。 如果指定的比较器为null,则此方法等效于reverseOrder()(换句话说,它返回一个比较器,该比较器对实现Comparable接口的对象集合施加自然排序的反转)。