Как отсортировать базу данных курсора или sqlite по дате в разных форматах? - PullRequest
0 голосов
/ 22 апреля 2019

Я пытаюсь отсортировать данные по дате в списке.В зависимости от настроек пользователя сохраненные даты следуют как DD.MM.YYYY или MMM DD, YYYY.Прямо сейчас порядок установлен на «дату ASC».

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

Таким образом, когда я сортирую по возрастанию, 26.07.2019 будет отображаться выше 31.03.2019, несмотря на то, что будет позже.В американском формате сортировка не работает, так как, например, апрель всегда отображается над любым другим месяцем.Я хотел бы поддержать оба формата даты для лучшего взаимодействия с пользователем.

Есть ли способ отсортировать даты в курсоре или базе данных в правильном порядке?

Ответы [ 2 ]

2 голосов
/ 22 апреля 2019

Это изменит формат даты на 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, либо сохранить даты в виде целых чисел (эпоха милис).

0 голосов
/ 22 апреля 2019

Попробуйте преобразовать дату в метку времени перед сортировкой.

Cursor cursor = getContentResolver().query(EventEntry.CONTENT_URI,
           projection, null, null, "strftime('%s', date) ASC");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...