Сортировка по дате вместо дня - PullRequest
0 голосов
/ 26 апреля 2018

Как отсортировать событие по дате, когда я пытаюсь это сделать, это сортировка по дням, но не сортировка по дате.

Например, если у нас есть три события 01/02/2018,23/04/2018, 01/06/2018, текущий результат сортировки, как показано ниже, [01/02/2018,01 / 06 / 2018,23 / 04/2018]

Спасибо!

1 Ответ

0 голосов
/ 26 апреля 2018

Вероятно, это связано с тем, что ваш столбец eventFrom в вашей базе данных имеет тип символов (например, varchar(10)).Когда вы делаете order by eventFrom, база данных сортирует строки, а не даты, которые мы с вами видим в строках.Это дает порядок сначала по дню месяца, так как это происходит первым в вашей строке, затем, если день месяца совпадает, по месяцу и, наконец, по году.Таким образом, 01/02/2018 предшествует 01/06/2018, потому что у них один и тот же день месяца, а 02 предшествует 06.

Два очевидных исправления:

  • Тип данных Best usedate для вашей колонки базы данных.Тогда сортировка будет в хронологическом порядке, как вы и ожидали.
  • Если ваша база данных не предлагает тип данных date (что, по всей вероятности, имеет), сохраните даты в строковом формате, указав сначала год, затем месяц ипоследний день месяцаЯ рекомендую вам использовать формат ISO 8601, так как это широко используемый стандарт, который вряд ли доставит вам неприятности.Тогда ваши даты будут выглядеть как 2018-02-01, 2018-04-23 и 2018-06-01, и сортировка будет соответствовать ожидаемой.

Я упомянул в комментарии, что вы используете устаревшие классы даты и времени.Класс из java.time, современного Java-API даты и времени, который вам нужен - LocalDate.«Местный» означает без часового пояса, а «дата» означает дату без времени суток, так что это подходит лучше, чем старомодные Date и Calendar.Еще одна очень приятная вещь - это то, что LocalDate.toString() производит именно тот формат ISO 8601, который я упомянул.Если вы не можете избежать формата строки, это будет удобно: вам не понадобится какой-либо явный форматер для создания формата, используемого в вашей базе данных.Также LocalDate.parse() анализирует тот же формат обратно в LocalDate объект без форматера.

Ссылки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...