«1. Обзор
В этом коротком руководстве мы увидим, как извлечь день недели в виде числа и текста из даты Java.
2. Проблема
Бизнес-логике часто требуется день недели. Почему? Во-первых, рабочее время и уровень обслуживания различаются в рабочие и выходные дни. Поэтому получение дня в виде числа необходимо для многих систем. Но нам также может понадобиться день как текст для отображения.
Итак, как нам извлечь день недели из дат в Java?
3. Решение с помощью java.util.Date
java.util.Date был классом даты Java, начиная с Java 1.0. Код, который начался с версии Java 7 или ниже, вероятно, использует этот класс.
3.1. День недели как число
Сначала мы извлекаем день недели как число, используя java.util.Calendar:
public static int getDayNumberOld(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal.get(Calendar.DAY_OF_WEEK);
}
Полученное число находится в диапазоне от 1 (воскресенье) до 7 (суббота). Календарь определяет для этого константы: Calendar.SUNDAY – Calendar.SATURDAY.
3.2. День недели в виде текста
Теперь мы извлекаем день недели в виде текста. Мы передаем Locale, чтобы определить язык:
public static String getDayStringOld(Date date, Locale locale) {
DateFormat formatter = new SimpleDateFormat("EEEE", locale);
return formatter.format(date);
}
Это возвращает полный день на вашем языке, например, «Monday» на английском или «Montag» на немецком.
4. Решение с помощью java.time.LocalDate
Java 8 переработала обработку даты и времени и представила java.time.LocalDate для дат. Поэтому проекты Java, которые работают только на Java версии 8 или выше, должны использовать этот класс!
4.1. День недели в виде числа
Извлечение дня в виде числа теперь тривиально:
public static int getDayNumberNew(LocalDate date) {
DayOfWeek day = date.getDayOfWeek();
return day.getValue();
}
Результирующее число по-прежнему находится в диапазоне от 1 до 7. Но на этот раз понедельник равен 1, а воскресенье — 7! День недели имеет собственное перечисление — DayOfWeek. Как и ожидалось, значения перечисления — ПОНЕДЕЛЬНИК — ВОСКРЕСЕНЬЕ.
4.2. День недели как текст
Теперь мы снова извлекаем день как текст. Мы также передаем Locale:
public static String getDayStringNew(LocalDate date, Locale locale) {
DayOfWeek day = date.getDayOfWeek();
return day.getDisplayName(TextStyle.FULL, locale);
}
Как и в случае с java.util.Date, это возвращает полный день на выбранном языке.
5. Заключение
В этой статье мы извлекли день недели из дат Java. Мы увидели, как вернуть число и текст, используя java.util.Date и java.time.LocalDate.
Как всегда, код доступен на GitHub.