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 .