Сортировать по дню недели с понедельника по воскресенье на Яве - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть день в следующем формате.

"Fri 05:00"
"Tue 10:15"
"Mon 02:00"

И я хочу отсортировать этот день, который начинается с понедельника по воскресенье.

Я попытался отформатировать эти даты в

SimpleDateFormat format = new SimpleDateFormat("EEE hh:mm");

Тогда я создал Список этих дат.Затем я использовал Calendar.DAY_OF_WEEK в Comparator, но он отсортирован по датам, которые начинаются с воскресенья, а не понедельника.

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Определить класс

Нет класса, связанного с Java, который бы представлял день недели в сочетании с временем дня.Для связанного класса потребуется дата.

Вам необходимо определить свой собственный такой класс, возможно, с именем DayOfWeekWithTime.Этот класс будет иметь два поля-члена: объект DayOfWeek и объект LocalTime.Поиск переполнения стека для многих существующих сообщений в этих классах.

public class DayOfWeekWithTime {
    // Member fields
    DayOfWeek dayOfWeek ;
    LocalTime localTime ;

    // Constructor
    public DayOfWeekWithTime ( DayOfWeek dayOfWeek , LocalTime localTime ) {
        Objects.requireNonNull( dayOfWeek ) ;
        Objects.requireNonNull( localTime ) ;
        this.dayOfWeek = dayOfWeek ;
        this.localTime = localTime ;
    }
}

Перечисление DayOfWeek соответствует стандарту ISO 8601, поэтому неделя определяется как понедельник-воскресенье.Это соответствует вашему желаемому порядку сортировки.Таким образом, вы можете отсортировать коллекцию DayOfWeekWithTime объектов по этому полю.См. Collections.sort( list , comparator ).Поиск Переполнение стека для многих существующих сообщений по теме сортировки объектов по определенному полю.

Для создания экземпляров DayOfWeekWithTime объектов из строковых входов, как показано в Вопросе, разделите на символ ПРОБЕЛ.См. String::split.Поиск переполнения стека для многих существующих сообщений на тему разделения строк.

Затем напишите подпрограмму для поиска перечисления DayOfWeek для каждого из ваших трехбуквенных значений ввода.Вы можете написать серию if-else-if.Или вы могли бы написать Map< String , DayOfWeek >.

Для времени суток вы можете анализировать, используя LocalTime.parse метод.При использовании 24-часовых часов с добавлением нуля к одиночным цифрам вам не нужно определять шаблон форматирования, поскольку классы java.time по умолчанию используют стандартные форматы ISO 8601 при синтаксическом анализе / генерации текста.Поиск переполнения стека для многих существующих сообщений по теме парсинга с классами java.time .

Do not use SimpleDateFormat или связанные ужасные дата-времяклассы, которые сейчас унаследованы, такие как Date или Calendar.Используйте только java.time классы для работы с датой и временем.


О java.time

фреймворк java.time встроен в Java 8 и более поздние версии.Эти классы вытесняют старые классные устаревшие классы даты и времени, такие как java.util.Date, Calendar, & SimpleDateFormat.

Проект Joda-Time , теперь в режиме обслуживания , рекомендует перейти на классы java.time .

Чтобы узнать больше, см. Oracle Tutorial .И поиск переполнения стека для многих примеров и объяснений.Спецификация: JSR 310 .

Вы можете обмениваться java.time объектами непосредственно с вашей базой данных.Используйте драйвер JDBC , совместимый с JDBC 4.2 или более поздней версии.Нет необходимости в строках, нет необходимости в java.sql.* классах.

Где получить классы java.time?

  • Java SE 8 , Java SE 9 , Java SE 10, Java SE 11 и более поздние версии - часть стандартного Java API с связанной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и JavaSE 7
    • Большинство функций java.time перенесено в Java 6 & 7 в ThreeTen-Backport .
  • Android
    • Более поздние версии пакетов Android для реализации java.time классы.
    • Для более ранних версий Android (<26) проект <a href="https://github.com/JakeWharton/ThreeTenABP" rel="nofollow noreferrer"> ThreeTenABP адаптируется ThreeTen-Backport (упомянуто выше).См. Как использовать ThreeTenABP… .

ThreeTen-Extra Проект расширяет java.time дополнительными классами.Этот проект является полигоном для возможных будущих дополнений к java.time.Здесь вы можете найти некоторые полезные классы, такие как Interval, YearWeek, YearQuarter и more .

0 голосов
/ 05 февраля 2019

Календарь имеет метод

setFirstDayOfWeek(ind day)

Вы можете использовать его: calendar.setFirstDayOfWeek(Calendar.Monday)

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