Android 带有日期排序节标题的游标适配器

Android 带有日期排序节标题的游标适配器,android,android-listview,android-cursor,Android,Android Listview,Android Cursor,通过以下教程,我基本上制作了一个带有字母索引的节标题的列表视图。我试着做同样的事情,按日期排序 这就是数据库中我的日期列的输入方式。 String currentDateTime=DateFormat.getDateTimeInstance().format(新日期()) 有人能帮我找到按日期排序的指针或代码片段吗?我知道的唯一方法是使用java.util.date。它只不过是一个长值的包装,对应于它所代表的时间和纪元之间的差异,1970年1月1日00:00:00 GMT。因此,您可以存储在DB

通过以下教程,我基本上制作了一个带有字母索引的节标题的列表视图。我试着做同样的事情,按日期排序

这就是数据库中我的日期列的输入方式。
String currentDateTime=DateFormat.getDateTimeInstance().format(新日期())


有人能帮我找到按日期排序的指针或代码片段吗?我知道的唯一方法是使用
java.util.date
。它只不过是一个长值的包装,对应于它所代表的时间和纪元之间的差异,
1970年1月1日00:00:00 GMT
。因此,您可以存储在DB long(而不是字符串)中,然后在查询表时按“日期”(long)对结果排序,用这些值构造日期。所有这些都是因为sqlite不支持日期格式

像这样的事情:

Cursor c = db.rawQuery("select * from table sort by table_column_date");
for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
     Date date = new Date(c.getLong("table_column_date"));
}

一个简单的方法是使用t库

首先,实现一个DateSectionizer。它从模型中加载日期时间戳,并将其“舍入”到当天的开始,因此当天的时间戳将具有相同的格式化日期字符串

public class DateSectionizer implements Sectionizer<Cursor>
{
   private static final SimpleDateFormat YMD_FORMAT = new SimpleDateFormat("yyyy-MMMMM-dd");

   private static long beginning_of_day(long timestamp)
   {
      Calendar c = Calendar.getInstance();
      c.setTimeInMillis( timestamp  );
      c.set( Calendar.HOUR_OF_DAY, 0 );
      c.set( Calendar.MINUTE, 0 );
      c.set( Calendar.SECOND, 0 );
      c.set(Calendar.MILLISECOND,0 );
      return c.getTimeInMillis();
   }

   @Override
   public String getSectionTitleForItem( Cursor cursor )
   {
      return YMD_FORMAT.format(new Date(beginning_of_day(cursor.getLong( 2 ));
   }
}
公共类日期分段器实现分段器
{
私有静态最终SimpleDataFormat YMD_格式=新SimpleDataFormat(“yyyy-MMMMM-dd”);
私有静态长起始日(长时间戳)
{
Calendar c=Calendar.getInstance();
c、 setTimeInMillis(时间戳);
c、 设置(日历小时/天,0);
c、 设置(日历分钟,0);
c、 设置(日历秒,0);
c、 设置(日历毫秒,0);
返回c.getTimeInMillis();
}
@凌驾
公共字符串getSectionTitleForItem(光标)
{
返回YMD_FORMAT.FORMAT(新日期(天的开始(cursor.getLong(2));
}
}
其次,将SimpleSectionAdapter包装在现有游标适配器周围:

 Context c = getApplicationContext();

 YourCursorAdapter yca = new YourCursorAdaper(c , your_cursor, true);
 your_list_view.setAdapter( new SimpleSectionAdapter<Cursor>(c,yca, R.layout.header_layout, R.id.date , new DateSectionizer() ));
Context c=getApplicationContext();
YourCursorAdapter yca=新的YourCursorAdapter(c,your_cursor,true);
您的\u列表\u视图.setAdapter(新的SimpleSectionAdapter(c、yca、R.layout.header\u布局、R.id.date、新的DateSectionizer());