Определение дня недели по дате в формате строки в Python

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы узнать день недели для определённой даты в Java используйте комбинацию класса LocalDate и перечисления DayOfWeek:

Java
Скопировать код
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.

Кинга Идем в IT: пошаговый план для смены профессии

Обработка различных форматов дат

Если вам нужно обрабатывать даты, заданные в разных форматах, воспользуйтесь классом DateTimeFormatter:

Java
Скопировать код
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:

Java
Скопировать код
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);  // даже с учетом времени в Нью-Йорке, день недели остается прежним – Среда!
    }
}

Визуализация

Пример задания даты и определения дня недели:

Java
Скопировать код
LocalDate date = LocalDate.of(2023, 4, 1);
DayOfWeek dayOfWeek = date.getDayOfWeek();
System.out.println(dayOfWeek);
Введенная датаРезультат
2023-04-01📅 -> Суббота

Каков результат? Если просмотреть календарь, то мы приходим к выводу, что это суббота – а это не менее интересный день, чем любой другой.

Тактики форматирования и локализации

Локализаторы

Возможно, вы захотите представить дату на испанском языке. Вот как это можно сделать:

Java
Скопировать код
String dayInSpanish = day.getDisplayName(TextStyle.FULL, new Locale("es", "ES"));
System.out.println(dayInSpanish);  // и мы получаем... ¡miércoles! (ничего смешного)

Сложные шаблоны

Чтобы избежать ошибок при форматировании даты, используйте точные шаблоны в DateTimeFormatter и будьте осторожны с Locale.getDefault(). Пример с использованием ISO-формата даты:

Java
Скопировать код
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:

Java
Скопировать код
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);  // независимо от метода, мы все равно приходим к Среде!
    }
}

Полезные материалы

  1. Trail: Date Time (The Java™ Tutorials) — Обзор функционала работы с датой и временем в Java 8.
  2. java.time.ZonedDateTime Class — Подробнее о классе ZonedDateTime.
  3. DayOfWeek (Java Platform SE 8) — Документация по работе с днями недели в Java.
  4. Java SimpleDateFormat – Java Date Format | DigitalOcean — Руководство по форматированию дат с помощью SimpleDateFormat.
  5. JDK 21 Documentation – Home — Последние обновления Java SE.
  6. Just a moment… — Обсуждение на Stack Overflow о том, как узнать день недели для конкретной даты.