如何按日期对具有不同格式的游标或sqlite数据库进行排序?

时间:2019-04-22 18:18:24

标签: java android sqlite

我正在尝试通过增加列表视图上的日期来对数据进行排序。 根据用户的设置,保存日期如下 DD.MM.YYYYMMM DD, YYYY。现在,订单设置为“日期ASC”。

Cursor cursor = getContentResolver().query(EventEntry.CONTENT_URI,
           projection, null, null, "date ASC");

当我按升序排序时,2019年7月26日将显示在2019年3月31日之上,尽管稍后显示。在美国格式中,排序始终无法进行,例如,Apr始终显示在任何其他月份的上方。我想同时支持两种日期格式,以提供更好的用户体验。

有没有办法以正确的顺序对游标或数据库中的日期进行排序?

2 个答案:

答案 0 :(得分:2)

这会将YYYYMMDD参数中的日期格式更改为order by

Cursor cursor = getContentResolver().query(
    EventEntry.CONTENT_URI,
    projection, null, null, 
    "substr(date, 7) || substr(date, 4, 2) || substr(date, 1, 2) ASC");

但是日期比较的问题仍然存在。
最好的办法是将日期格式更改为YYYY-MM-DD或将日期存储为整数(纪元)。

答案 1 :(得分:0)

尝试在排序之前将日期转换为时间戳。

Cursor cursor = getContentResolver().query(EventEntry.CONTENT_URI,
           projection, null, null, "strftime('%s', date) ASC");