Рубрики
Без рубрики

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

Краткое и практическое руководство по определению дня недели на Java.

Автор оригинала: baeldung.

1. Обзор

В этом коротком уроке мы увидим, как извлечь день недели в виде числа и текста из даты Java.

2. Проблема

Бизнес – логика часто нуждается в дне недели. Почему? Во-первых, рабочее время и уровень обслуживания различаются между рабочими и выходными днями. Поэтому получение дня в виде числа необходимо для многих систем. Но нам также может понадобиться день в качестве текста для отображения.

Итак, как мы извлекаем день недели из дат на Java?

3. Решение С java.util.Date

java.util.Date является классом Java date начиная с Java 1.0. Код, который начался с Java версии 7 или ниже, вероятно, использует этот класс.

3.1. День недели как число

Во-первых, мы извлекаем день в виде числа с помощью java.util.Календарь :

public static int getDayNumberOld(Date date) {
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    return cal.get(Calendar.DAY_OF_WEEK);
}

Результирующее число колеблется от 1 (воскресенье) до 7 (суббота) . Календарь определяет константы для этого: Календарь.ВОСКРЕСЕНЬЕКалендарь.СУББОТА .

3.2. День недели в виде текста

Теперь мы извлекаем день в виде текста . Мы передаем в Locale , чтобы определить язык:

public static String getDayStringOld(Date date, Locale locale) {
    DateFormat formatter = new SimpleDateFormat("EEEE", locale);
    return formatter.format(date);
}

Это возвращает полный день на вашем языке , например “Понедельник” на английском или “Монтэг” на немецком.

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 ! день недели имеет свой собственный перечисление День недели . Как и ожидалось, значения enum равны MONDAYSUNDAY .

4.2. День недели в виде текста

Теперь мы снова извлекаем день в виде текста. Мы также передаем в Locale :

public static String getDayStringNew(LocalDate date, Locale locale) {
    DayOfWeek day = date.getDayOfWeek();
    return day.getDisplayName(TextStyle.FULL, locale);
}

Так же, как и с java.util.Дата , это возвращает полный день на выбранном языке.

5. Заключение

В этой статье мы извлекли день недели из дат Java. Мы видели, как вернуть и число, и текст с помощью java.util.Дата и java.time.LocalDate .

Как всегда, код доступен на GitHub .