Как получить день недели по заданной дате?
Я хочу выяснить следующее: given a date (объект datetime
), как получить соответствующий день недели?
Например, воскресенье - это первый день, понедельник - второй день и так далее.
Также мне нужно получить результат для текущей даты.
Пример
>>> today = datetime.datetime(2017, 10, 20)
>>> today.get_weekday() # то, что мне нужно
На выходе может быть 6
(поскольку это пятница).
5 ответ(ов)
Если вы хотите получить название дня недели на языке вашей текущей локали, можете использовать следующий код:
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.
Если вы хотите получить название дня недели на языке вашей текущей локали, вы можете использовать следующий код:
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
Вот решение без использования импортов для определения дня недели для дат после 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 года и учитывает високосные годы. Результат возвращается как кортеж с номером дня недели и его названием. Учтите, что в коде используется целочисленное деление (//
), чтобы избежать ошибок с плавающими точками.
Если у вас даты представлены в виде строки, то, возможно, будет проще использовать 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())
Вы получите тот же результат, но с более актуальным методом.
Вот простой фрагмент кода для решения этой задачи:
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), который затем используется для получения названия дня из списка.
Преобразование даты в datetime в Python
Преобразование Unix-метки времени в формат времени в JavaScript
Существует ли список временных зон Pytz?
Как преобразовать datetime в date?
Как конвертировать секунды в часы, минуты и секунды?