Как отсортировать дату в формате строки в Java?

Есть ли какая-то причина, по которой вы не можете использовать alloca () для выделения необходимого пространства в фрейме стека в зависимости от того, насколько большой объект действительно должен быть?

Если вы это сделаете и все равно выложите стек, положите его в выделенную кучу. Я настоятельно рекомендую НЕ объявлять его как static в main () и помещать его в сегмент данных.

Если это действительно так важно, и ваша программа не может выделить его в кучу, ваша программа действительно на самом деле не работает бизнес на этом типе машины.

Что (точно) вы пытаетесь выполнить?

23
задан Ole V.V. 12 October 2018 в 08:36
поделиться

3 ответа

Можно сравнить Список даты в строковом формате, используя сравнение, как указано ниже.

ArrayList<String> datestring=new ArrayList<String>();
datestring.add("01/21/2013 @03:13 PM");
datestring.add("01/21/2013 @04:37 PM");
datestring.add("01/21/2013 @10:41 AM");
datestring.add("01/21/2013 @10:48 AM");
datestring.add("01/22/2013 @06:16 AM");
datestring.add("01/22/2013 @06:19 AM");
datestring.add("01/21/2013 @05:19 PM");
datestring.add("01/21/2013 @05:19 PM");

Collections.sort(datestring, new Comparator<String>() {
                @Override
                public int compare(String object1, String object2) {
                    return object1.compareTo(object2);
                }
            });

При использовании этого вам даже не нужно анализировать строку в дату

3
ответ дан Navankur Chauhan 12 October 2018 в 08:36
поделиться

java.time

Во-первых, как уже сказал Bowmore , вы не должны хранить строки в своем списке. Вместо этого используйте экземпляры классов java.time .

Сохранить LocalDateTime объектов. Или ZonedDateTime, если вы знаете, в каком часовом поясе время. Строки хороши для представления пользователю, а не для манипуляций в вашей программе, таких как сортировка.

Следующий код преобразует ваш список в List<LocalDateTime>:

    DateTimeFormatter formatter 
            = DateTimeFormatter.ofPattern("MM/dd/uuuu '@'hh:mm a", Locale.ENGLISH);

    List<LocalDateTime> dateTimeList = datestring.stream()
            .map(ds -> LocalDateTime.parse(ds, formatter))
            .collect(Collectors.toCollection(ArrayList::new));

Теперь сортировка проста:

dateTimeList.sort(Comparator.naturalOrder());

LocalDateTime имеют естественный порядок, поскольку они реализуют Comparable, поэтому Comparator.naturalOrder() подходит для сортировки. Другой способ получения такой же сортировки:

dateTimeList.sort(LocalDateTime::compareTo);

Чтобы представить отсортированные данные пользователю, мы хотим отформатировать дату и время в строки, конечно:

dateTimeList.forEach(ldt -> System.out.println(ldt.format(formatter)));

вывод:

01/21/2013 @10:41 AM
01/21/2013 @10:48 AM
01/21/2013 @03:13 PM
01/21/2013 @04:37 PM
01/21/2013 @05:19 PM
01/21/2013 @05:19 PM
01/22/2013 @06:16 AM
01/22/2013 @06:19 AM

За исключением точек с запятой и одной простой опечатки, я считаю, что это именно то, что вы просили.

Ссылка: Обучающая программа Oracle: Дата и время , объясняющая, как использовать java.time, современный Java-интерфейс даты и времени, который включает в себя LocalDateTime и DateTimeFormatter.

3
ответ дан Ole V.V. 12 October 2018 в 08:36
поделиться

ArrayList не поддерживает сортировку по умолчанию. Вы можете использовать

public static <T> void sort(List<T> list, Comparator<? super T> c) из java.util.Collections класса. передать вашу реализацию компаратора для сортировки дат, что-то вроде

http://www.coderanch.com/t/392338/java/java/compare-Dates-String-Format

0
ответ дан kosa 12 October 2018 в 08:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: