Java 如何让SQLite使用YYYY-MM-DD格式按日期正确排序?
我正在制作一个应用程序,它需要按日期对Sqlite周表进行排序,并在列表视图中仅显示日期和每周工作的总小时数 “我的活动”扩展了listview,并使用SimpleCursorAdapter填充listview。“我的日期”列是一个文本字段,格式如下“YYYY-MM-DD” 这是我的数据库查询函数,我的数据库助手类基于GoogleNotepad示例Java 如何让SQLite使用YYYY-MM-DD格式按日期正确排序?,java,android,sqlite,Java,Android,Sqlite,我正在制作一个应用程序,它需要按日期对Sqlite周表进行排序,并在列表视图中仅显示日期和每周工作的总小时数 “我的活动”扩展了listview,并使用SimpleCursorAdapter填充listview。“我的日期”列是一个文本字段,格式如下“YYYY-MM-DD” 这是我的数据库查询函数,我的数据库助手类基于GoogleNotepad示例 public Cursor getAllWeeks() { Cursor mCursor = mDb.query(true,
public Cursor getAllWeeks()
{
Cursor mCursor = mDb.query(true, DATABASE_TABLE, null, null, null, null, null, "weekdate ASC", null);
if (mCursor != null)
{
mCursor.moveToFirst();
}
return mCursor;
}
我将其挂接到ListView,如下所示:
public class WeekList extends ListActivity implements OnClickListener{
final static int DELETE_ID = Menu.FIRST + 1;
public static NotesDbAdapter DBadapter;
public static Cursor ListCursor;
static final String[] displaycolumns = {"weekdate", "weektotalhours"};
static final int[] listitemviews = {R.id.TextViewListItem1, R.id.TextViewListItem2};
@Override
public void onCreate(Bundle icicle)
{
super.onCreate(icicle);
setContentView(R.layout.weeklist);
Log.i("bendebug", "logtest");
DBadapter = new NotesDbAdapter(this);
DBadapter.open();
ListCursor = DBadapter.getAllWeeks();
this.setListAdapter(new SimpleCursorAdapter(this, R.layout.listitemlayouts, ListCursor,
displaycolumns, listitemviews));
findViewById(R.id.ButtonAddWeek).setOnClickListener(this);
//Activate the context menu
registerForContextMenu(getListView());
}
2010-7-19
2010-7-23
2010-7-24
2010-7-6
我遇到的问题是,我的光标似乎没有正确排序,我的周列表如下所示:
public class WeekList extends ListActivity implements OnClickListener{
final static int DELETE_ID = Menu.FIRST + 1;
public static NotesDbAdapter DBadapter;
public static Cursor ListCursor;
static final String[] displaycolumns = {"weekdate", "weektotalhours"};
static final int[] listitemviews = {R.id.TextViewListItem1, R.id.TextViewListItem2};
@Override
public void onCreate(Bundle icicle)
{
super.onCreate(icicle);
setContentView(R.layout.weeklist);
Log.i("bendebug", "logtest");
DBadapter = new NotesDbAdapter(this);
DBadapter.open();
ListCursor = DBadapter.getAllWeeks();
this.setListAdapter(new SimpleCursorAdapter(this, R.layout.listitemlayouts, ListCursor,
displaycolumns, listitemviews));
findViewById(R.id.ButtonAddWeek).setOnClickListener(this);
//Activate the context menu
registerForContextMenu(getListView());
}
2010-7-19
2010-7-23
2010-7-24
2010-7-6
而不是被正确地分类。我可能错过了一些非常明显的东西,因为我是一个试图自学的傻瓜
显然,我缩短了代码以使其更具可读性,因为活动的其余部分与此无关,但我很乐意根据请求发布活动的完整代码,不管怎样,这都是非常基本的。使用月和日的前导零。SQLite没有内置日期字段;您必须使用
TEXT
(文本表示)、INTEGER
(unix时间)或REAL。请参阅:
您可以使用前导零(如dan所建议的),或者更好地将它们另存为
INTEGER
字段。您可以使用或Java(或您正在使用的任何东西)将这些数据转换回人类可读的日期。我必须进行类似的排序。最后,我将日期作为实数存储在SQLite中,以自1970年1月1日00:00 GMT以来的毫秒数表示。然后,您可以简单地对这些日期进行数字排序(较大的数字随后按时间顺序出现)。然后可以使用SimpleDataFormat将其转换为字符串。还可以让你利用时间元素做一些有帮助的事情--+1你发帖的时候,我确实是在打字。例如,拥有2010-07-06
将解决所有订购困难。非常感谢,我不敢相信我没有注意到这一点。好的,我将研究时间戳的问题,这可能会使更改数据库中的某些内容更容易。