Отображение названия дня недели в Java

В этом уроке Java мы рассмотрим различные методы отображения названия дня недели, соответствующие различным сценариям и требованиям. Обратите внимание, что нам следует быть осторожными при использовании значений int, назначенных дням недели, поскольку они различаются от метода к методу.

1. Отображение дня недели с помощью Java 8 DayOfWeek

Java.time.DayOfWeek является частью новых API даты и времени Java 8 и представляет день недели, например, «вторник». Это перечисление, представляющее 7 дней недели — понедельник, вторник, среду, четверг, пятницу, субботу и воскресенье.

В дополнение к текстовому имени перечисления, каждый день недели имеет значение int от 1(понедельник) до 7(воскресенье). Некоторые локали также присваивают дням различные числовые значения, объявляя воскресенье имеющим значение 1, однако этот класс не предоставляет для этого поддержки. Используйте WeekFields для локализованной нумерации недель.

1.1. Отображение названий всех дней недели

Следующая программа Java перебирает константы перечисления DayOfWeek и выводит все названия дней «days[t]» и присвоенные им значения типа int t.

DayOfWeek[] days = DayOfWeek.values();IntStream.range(0, days.length).mapToObj(t -> String.format("Day: %d -> %s", t, days[t])).forEach(System.out::println);

Вывод программы:

Day: 0 -> MONDAYDay: 1 -> TUESDAYDay: 2 -> WEDNESDAYDay: 3 -> THURSDAYDay: 4 -> FRIDAYDay: 5 -> SATURDAYDay: 6 -> SUNDAY

1.2. Поиск названия дня недели для заданной даты

Иногда нам может потребоваться узнать название дня недели для определенной даты. Это можно сделать с помощью метода DayOfWeek.from(temporal).

LocalDate localDate = LocalDate.now();DayOfWeek weekOfTheDay = DayOfWeek.from(localDate);System.out.println(weekOfTheDay.getValue());System.out.println(weekOfTheDay.getDisplayName(TextStyle.FULL, Locale.getDefault()));

Вывод программы:

5Friday

Чтобы вывести имена в указанной локали, мы можем передать информацию о локали методу getDisplayName().

System.out.println(weekOfTheDay.getDisplayName(TextStyle.FULL, Locale.FRENCH));

Вывод программы:

vendredi

2. Использование DateFormatSymbols

Класс DateFormatSymbols также предоставляет методы для извлечения названий дней недели на разных языках и в разных форматах. Этот класс можно использовать с устаревшими приложениями, которые еще не перешли на Java 8.

Обратите внимание на вывод программы, в котором значения int присваиваются от 1 до 7, где 1 — воскресенье, а 7 — суббота.

IntStream.range(0, weekdays.length).filter(t -> !weekdays[t].isBlank()).mapToObj(t -> String.format("Day: %d -> %s", t, weekdays[t])).forEach(System.out::println);

Вывод программы:

Day: 1 -> SundayDay: 2 -> MondayDay: 3 -> TuesdayDay: 4 -> WednesdayDay: 5 -> ThursdayDay: 6 -> FridayDay: 7 -> Saturday

Для отображения имени в определенной локали мы можем использовать метод DateFormatSymbols.getInstance(locale), чтобы получить его экземпляр.

String[] weekdays = DateFormatSymbols.getInstance(Locale.FRENCH).getWeekdays();//...

Вывод программы:

Day: 1 -> dimancheDay: 2 -> lundiDay: 3 -> mardiDay: 4 -> mercrediDay: 5 -> jeudiDay: 6 -> vendrediDay: 7 -> samedi

Если мы хотим получить название дня недели для указанной даты, мы можем использовать массив weekdays и передать индекс, полученный из calendar.get(Calendar.DAY_OF_WEEK).

String[] weekdays = DateFormatSymbols.getInstance().getWeekdays();Calendar calendar = Calendar.getInstance();int dayOfWeekValue = calendar.get(Calendar.DAY_OF_WEEK);System.out.println(weekdays[dayOfWeekValue]);

Вывод программы:

Friday

Настройте код в соответствии с указанной датой и предпочтениями отображения. Такой подход позволяет получить название дня недели для любой заданной даты.

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

Получение и отображение названия дня недели является общим требованием во многих приложениях. В этом руководстве были изучены методы, использующие перечисление Java 8 DayOfWeek и класс DateFormatSymbols.

В качестве лучшей практики мы не должны использовать целые значения для представления названий дней недели. Вместо этого мы должны использовать константы enum для безошибочного и чистого кода.

Исходный код на Github

Прокрутить вверх