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