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 равны MONDAY – SUNDAY .
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 .