9

Как получить день недели по заданной дате?

6

Я хочу выяснить следующее: given a date (объект datetime), как получить соответствующий день недели?

Например, воскресенье - это первый день, понедельник - второй день и так далее.

Также мне нужно получить результат для текущей даты.

Пример

>>> today = datetime.datetime(2017, 10, 20)
>>> today.get_weekday()  # то, что мне нужно

На выходе может быть 6 (поскольку это пятница).

5 ответ(ов)

4

Если вы хотите получить название дня недели на языке вашей текущей локали, можете использовать следующий код:

from datetime import date
import calendar
import locale

# Установите локаль в соответствии с вашими предпочтениями
locale.setlocale(locale.LC_TIME, 'ru_RU.UTF-8')  # Для русского языка

my_date = date.today()
day_name = calendar.day_name[my_date.weekday()]
print(day_name)  # Например, 'среда'

Обратите внимание, что вы можете установить нужную локаль, изменив аргумент в locale.setlocale(). Убедитесь, что соответствующая локаль поддерживается на вашей системе.

Дополнительную информацию можно найти в документации: calendar.day_name.

2

Если вы хотите получить название дня недели на языке вашей текущей локали, вы можете использовать следующий код:

from datetime import datetime
import locale

# Установите локаль, например, на русский (Россия)
locale.setlocale(locale.LC_TIME, 'ru_RU.UTF-8')

# Получите полное название дня недели
print(datetime.now().strftime('%A'))  # 'Среда'

# Получите сокращенное название дня недели
print(datetime.now().strftime('%a'))  # 'Ср'

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

Дополнительную информацию можно найти в документации: https://docs.python.org/3/library/datetime.html#strftime-strptime-behavior

0

Вот решение без использования импортов для определения дня недели для дат после 1 января 1700 года:

def weekDay(year, month, day):
    offset = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]
    week   = ['Sunday', 
              'Monday', 
              'Tuesday', 
              'Wednesday', 
              'Thursday',  
              'Friday', 
              'Saturday']
    
    afterFeb = 1
    if month > 2:
        afterFeb = 0
    aux = year - 1700 - afterFeb
    
    # День недели для 1700/1/1 = 5 (пятница)
    dayOfWeek = 5  
    # Частичная сумма дней между текущей датой и 1700/1/1
    dayOfWeek += (aux + afterFeb) * 365               
    # Коррекция для високосного года    
    dayOfWeek += aux // 4 - aux // 100 + (aux + 100) // 400     
    # Сумма смещений по месяцам и дней
    dayOfWeek += offset[month - 1] + (day - 1)               
    dayOfWeek %= 7
    return dayOfWeek, week[dayOfWeek]

# Примеры использования функции
print(weekDay(2013, 6, 15) == (6, 'Saturday'))
print(weekDay(1969, 7, 20) == (0, 'Sunday'))
print(weekDay(1945, 4, 30) == (1, 'Monday'))
print(weekDay(1900, 1, 1) == (1, 'Monday'))
print(weekDay(1789, 7, 14) == (2, 'Tuesday'))

Эта функция weekDay вычисляет день недели по заданной дате, принимая год, месяц и день в качестве аргументов. Она работает, основываясь на вычислениях, начиная с 1 января 1700 года и учитывает високосные годы. Результат возвращается как кортеж с номером дня недели и его названием. Учтите, что в коде используется целочисленное деление (//), чтобы избежать ошибок с плавающими точками.

0

Если у вас даты представлены в виде строки, то, возможно, будет проще использовать Timestamp из библиотеки pandas. Вот пример кода:

import pandas as pd
df = pd.Timestamp("2019-04-12")
print(df.dayofweek, df.weekday_name)

Вывод будет следующим:

4 Friday

В данном случае df.dayofweek возвращает номер дня недели (где понедельник - 0, а воскресенье - 6), а df.weekday_name возвращает название дня недели. Обратите внимание, что weekday_name устарел и лучше использовать day_name() в последних версиях pandas. Тогда код будет выглядеть так:

import pandas as pd
df = pd.Timestamp("2019-04-12")
print(df.dayofweek, df.day_name())

Вы получите тот же результат, но с более актуальным методом.

0

Вот простой фрагмент кода для решения этой задачи:

import datetime

intDay = datetime.date(year=2000, month=12, day=1).weekday()
days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
print(days[intDay])

Вывод будет следующим:

Friday

Этот код использует модуль datetime для определения дня недели заданной даты. Метод weekday() возвращает индекс дня (где понедельник — это 0, а воскресенье — 6), который затем используется для получения названия дня из списка.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь