Определение дня недели по дате в формате строки в Python
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Чтобы узнать день недели для определённой даты в Java используйте комбинацию класса LocalDate
и перечисления DayOfWeek
:
import java.time.*;
public class DayOfWeekExample {
public static void main(String[] args) {
LocalDate date = LocalDate.of(2023, 3, 15); // дата связана с числом Пи, интересно, не так ли?
DayOfWeek day = date.getDayOfWeek();
System.out.println(day); // и что мы видим? Среду!
}
}
Метод LocalDate.of(year, month, day)
создаёт объект LocalDate
, а getDayOfWeek()
возвращает день недели в виде элемента перечисления DayOfWeek
.
Обработка различных форматов дат
Если вам нужно обрабатывать даты, заданные в разных форматах, воспользуйтесь классом DateTimeFormatter
:
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.format.TextStyle;
import java.util.Locale;
public class RandomDateFormatExample {
public static void main(String[] args) {
String dateString = "15-Mar-2023"; // не самый стандартный формат даты, но все равно достаточно изящный.
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MMM-yyyy", Locale.ENGLISH);
LocalDate date = LocalDate.parse(dateString, formatter);
DayOfWeek day = date.getDayOfWeek();
String dayName = day.getDisplayName(TextStyle.FULL, Locale.ENGLISH);
System.out.println(dayName); // снова среда, на английском – Wednesday!
}
}
Этот код наглядно демонстрирует преобразование строки в дату и последующее определение дня недели.
Совместимость и часовые пояса
Для поддержки пакета java.time
в Java 6 и 7 версий и на Android, можно использовать библиотеку ThreeTen-Backport и её расширение ThreeTenABP.
Если же требуется учитывать различие в часовых поясах, то для определения дня недели по местному времени можно использовать класс ZonedDateTime
:
import java.time.*;
public class MarsTimeExample {
public static void main(String[] args) {
ZonedDateTime zonedDate = ZonedDateTime.of(2023, 3, 15, 0, 0, 0, 0, ZoneId.of("America/New_York"));
DayOfWeek day = zonedDate.getDayOfWeek();
System.out.println(day); // даже с учетом времени в Нью-Йорке, день недели остается прежним – Среда!
}
}
Визуализация
Пример задания даты и определения дня недели:
LocalDate date = LocalDate.of(2023, 4, 1);
DayOfWeek dayOfWeek = date.getDayOfWeek();
System.out.println(dayOfWeek);
Введенная дата | Результат |
---|---|
2023-04-01 | 📅 -> Суббота |
Каков результат? Если просмотреть календарь, то мы приходим к выводу, что это суббота – а это не менее интересный день, чем любой другой.
Тактики форматирования и локализации
Локализаторы
Возможно, вы захотите представить дату на испанском языке. Вот как это можно сделать:
String dayInSpanish = day.getDisplayName(TextStyle.FULL, new Locale("es", "ES"));
System.out.println(dayInSpanish); // и мы получаем... ¡miércoles! (ничего смешного)
Сложные шаблоны
Чтобы избежать ошибок при форматировании даты, используйте точные шаблоны в DateTimeFormatter
и будьте осторожны с Locale.getDefault()
. Пример с использованием ISO-формата даты:
String isoDate = "2023-03-15";
DateTimeFormatter isoFormatter = DateTimeFormatter.ISO_DATE;
LocalDate isoToLocalDate = LocalDate.parse(isoDate, isoFormatter);
System.out.println(isoToLocalDate.getDayOfWeek()); // опять среда, заметили?
Работа с SimpleDateFormat в старых версиях Java
Для работы с более ранними версиями Java можно использовать java.text.SimpleDateFormat
:
import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleDateFormatExample {
public static void main(String[] args) throws Exception {
String dateStr = "2023-03-15";
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date date = formatter.parse(dateStr);
formatter.applyPattern("EEEE");
String dayOfWeek = formatter.format(date);
System.out.println(dayOfWeek); // независимо от метода, мы все равно приходим к Среде!
}
}
Полезные материалы
- Trail: Date Time (The Java™ Tutorials) — Обзор функционала работы с датой и временем в Java 8.
- java.time.ZonedDateTime Class — Подробнее о классе
ZonedDateTime
. - DayOfWeek (Java Platform SE 8) — Документация по работе с днями недели в Java.
- Java SimpleDateFormat – Java Date Format | DigitalOcean — Руководство по форматированию дат с помощью
SimpleDateFormat
. - JDK 21 Documentation – Home — Последние обновления Java SE.
- Just a moment… — Обсуждение на Stack Overflow о том, как узнать день недели для конкретной даты.