Сортировка и сравнение объектов Java Date дает неожиданные результаты - PullRequest
0 голосов
/ 11 марта 2012

У меня есть несколько объектов java Date, которые я пытаюсь отсортировать в порядке возрастания дат.

Они загружаются из CSV с использованием простого форматера даты в британском формате «дд / мм / гг ЧЧ: сс» и выводятся в том же формате, например

new SimpleDateFormat("dd/mm/yy HH:ss", Locale.ENGLISH);

Это работает правильно.

Однако, когда я пытаюсь отсортировать их (реализуя интерфейс Comparator), они сортируются неправильно, по-видимому, в формате даты США (мм / дд / гг).

    public int compare(CSVEntry t, CSVEntry t1) {
        if (t.date.before(t1.date))
            return -1;
        else if (t.date.after(t1.date))
            return 1;
        else
            return 0;
    }

Это не зависит от того, какой метод я использую (Date.after () или Date.before () или Date.compareTo), и независимо от того, какой язык установлен.

Я попытался установить системное значение по умолчанию, используя:

Locale.setDefault(Locale.ENGLISH);

Без эффекта.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 11 марта 2012
"dd/mm/yy HH:ss"

mm - минуты часа.Вы, наверное, ищете MM (месяц года).

Также, HH:ss?Не HH:mm или HH:mm:ss?

0 голосов
/ 11 марта 2012

Если t.date на самом деле является Date объектом, то формат вашего ввода не имеет значения. Он будет сравнивать поля самого объекта Date.

Следовательно, почти наверняка проблема в том, как вы преобразовали текстовую дату в Date объект.

Я думаю, вам нужно отладить этот процесс и выяснить, почему (или если) дата конвертируется неправильно.

Для начала вам следует использовать следующий формат:

dd/MM/yy HH:ss

Нижний регистр m (как показано здесь ) - для минут, а не месяцев. Я предполагаю, что ваш довольно "странный" HH:ss - это то, что вы хотите, даже если он не имеет спецификатора минут.

Вы также можете проверить это.

...