Во-первых, как уже сказал Bowmore , вы не должны хранить строки в своем списке. Вместо этого используйте экземпляры классов java.time .
Сохранить LocalDateTime
объектов. Или ZonedDateTime
, если вы знаете, в каком часовом поясе время. Строки хороши для представления пользователю, а не для манипуляций в вашей программе, таких как сортировка.
Следующий код преобразует ваш список в List
:
DateTimeFormatter formatter
= DateTimeFormatter.ofPattern("MM/dd/uuuu '@'hh:mm a", Locale.ENGLISH);
List 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
.
и иметь равномерное распределение ширины
Только таблицы (или CSS display: table) дадут вам такое поведение, если вы не рассчитываете ширину с помощью JS (что нелегко или идеально).