Как мне получить день недели с учетом даты в Python? - PullRequest
462 голосов
/ 24 марта 2012

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

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

И затем, если ввод будет похож на сегодняшнюю дату.

Пример

>>> today = datetime.datetime(2017, 10, 20)
>>> today.get_weekday()  # what I look for

Вывод может быть 6 (с пятницы)

Ответы [ 20 ]

751 голосов
/ 24 марта 2012

Использование weekday() ( документы ):

>>> import datetime
>>> datetime.datetime.today()
datetime.datetime(2012, 3, 23, 23, 24, 55, 173504)
>>> datetime.datetime.today().weekday()
4

Из документации:

Возвращает день недели в виде целого числа, где понедельник равен 0, а воскресенье - 6.

238 голосов
/ 08 апреля 2015

Если вы хотите иметь дату на английском языке:

from datetime import date
import calendar
my_date = date.today()
calendar.day_name[my_date.weekday()]  #'Wednesday'
41 голосов
/ 24 марта 2012

Используйте date.weekday() или date.isoweekday().

27 голосов
/ 25 июля 2018

Если вы хотите иметь дату на английском языке:

>>> from datetime import datetime
>>> datetime.today().strftime('%A')
'Wednesday'

Подробнее: https://docs.python.org/2/library/datetime.html#strftime-strptime-behavior

22 голосов
/ 24 марта 2012

Я решил это для кодефа вопрос .

import datetime
dt = '21/03/2012'
day, month, year = (int(x) for x in dt.split('/'))    
ans = datetime.date(year, month, day)
print ans.strftime("%A")
20 голосов
/ 15 июня 2013

Решение без импорта для дат после 1700/1/1

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
    # dayOfWeek for 1700/1/1 = 5, Friday
    dayOfWeek  = 5
    # partial sum of days betweem current date and 1700/1/1
    dayOfWeek += (aux + afterFeb) * 365                  
    # leap year correction    
    dayOfWeek += aux / 4 - aux / 100 + (aux + 100) / 400     
    # sum monthly and day offsets
    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')
10 голосов
/ 29 октября 2015

Это решение, если дата является объектом datetime.

import datetime
def dow(date):
    days=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]
    dayNumber=date.weekday()
    print days[dayNumber]
8 голосов
/ 12 марта 2017

библиотека datetime иногда выдает ошибки с помощью strptime (), поэтому я переключился на библиотеку dateutil. Вот пример того, как вы можете его использовать:

from dateutil import parser
parser.parse('January 11, 2010').strftime("%a")

Вывод, который вы получаете от этого 'Mon'. Если вы хотите выводить как «Понедельник», используйте следующее:

parser.parse('January 11, 2010').strftime("%A")

Это сработало для меня довольно быстро. У меня были проблемы при использовании библиотеки datetime, потому что я хотел сохранить имя дня недели вместо номера дня недели, а формат от использования библиотеки datetime вызывал проблемы. Если у вас нет проблем с этим, отлично! Если да, то вы наверняка пойдете на это, так как он имеет более простой синтаксис. Надеюсь, это поможет.

6 голосов
/ 23 апреля 2014

Если вам даны день, месяц и год, вы можете сделать:

import datetime
DayL = ['Mon','Tues','Wednes','Thurs','Fri','Satur','Sun']
date = DayL[datetime.date(year,month,day).weekday()] + 'day'
#Set day, month, year to your value
#Now, date is set as an actual day, not a number from 0 to 6.

print(date)
4 голосов
/ 22 декабря 2017

Если вы не зависите исключительно от модуля datetime, лучше подойдет calendar. Это, например, предоставит вам коды дня:

calendar.weekday(2017,12,22);

И это даст вам сам день:

days = ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]
days[calendar.weekday(2017,12,22)]

Или в стиле python, как один лайнер:

["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"][calendar.weekday(2017,12,22)]
...