Перейти к основному содержимому

Как определить день недели, передав определенную дату в Java?

· 2 мин. чтения

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.SUNDAYCalendar.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 .