Comment puis-je obtenir le jour de la semaine donné une date en Python?

Je veux savoir ce qui suit: étant donné une date (datetime objet), quel est le jour correspondant de la semaine.

Par exemple, le dimanche est le premier jour, le lundi: le deuxième jour.. et ainsi de suite

, puis si l'entrée est quelque chose comme la date d'aujourd'hui.

Exemple

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

La sortie est peut-être 6 (depuis son vendredi)

355
demandé sur Martin Thoma 2012-03-24 02:21:18

16 réponses

Utiliser weekday() (docs):

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

De la documentation:

Renvoie le jour de la semaine sous forme d'entier, où Lundi vaut 0 et dimanche vaut 6.

583
répondu Simeon Visser 2012-06-28 08:59:57

Si vous souhaitez avoir la date en anglais:

>>> from datetime import date
>>> import calendar
>>> my_date = date.today()
>>> calendar.day_name[my_date.weekday()]
'Wednesday'
192
répondu seddonym 2015-04-08 15:43:58
34
répondu orlp 2017-08-16 05:14:27

Une solution sans importations pour les dates après 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')
20
répondu Arnaldo P. Figueira Figueira 2014-02-25 04:02:01

J'ai résolu cela pour une question codechef .

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")
17
répondu Ashwini Chaudhary 2014-04-10 19:44:45

C'est une solution si la date est un objet datetime.

import datetime
def dow(date):
    days=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]
    dayNumber=date.weekday()
    print days[dayNumber]
8
répondu Rodrigo 2015-10-29 14:06:34

La bibliothèque Datetime donne parfois des erreurs avec strptime () donc je suis passé à la bibliothèque dateutil. Voici un exemple de comment vous pouvez l'utiliser :

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

La sortie que vous obtenez de ceci est 'Mon'. Si vous voulez que la sortie soit 'Monday', utilisez ce qui suit:

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

Cela a fonctionné pour moi assez rapidement. J'avais des problèmes lors de l'utilisation de la bibliothèque datetime parce que je voulais stocker le nom du jour de la semaine au lieu du numéro du jour de la semaine et le format de l'utilisation de la bibliothèque datetime causait problème. Si vous n'avez pas de problèmes avec cela, génial! Si vous l'êtes, vous pouvez absolument y aller car il a également une syntaxe plus simple. Espérons que cette aide.

6
répondu Shashwat Siddhant 2017-03-12 00:01:28

En supposant que vous avez le jour, le mois et l'année, vous pouvez faire:

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)
5
répondu mathwizurd 2014-04-24 00:58:32

Si vous n'êtes pas uniquement dépendant du module datetime, {[4] } pourrait être une meilleure alternative. Ceci, par exemple, vous fournira les codes de jour:

calendar.weekday(2017,12,22);

Et cela vous donnera le jour même:

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

Ou dans le style de python, comme un liner:

["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"][calendar.weekday(2017,12,22)]
3
répondu AnaCronIsm 2017-12-22 03:51:51

Si vous avez des raisons d'éviter l'utilisation du module datetime, cette fonction fonctionnera.

Note: le changement du calendrier julien au calendrier grégorien est supposé avoir eu lieu en 1582. Si cela n'est pas vrai pour votre calendrier d'intérêt, Modifiez la ligne si année > 1582: en conséquence.

def dow(year,month,day):
    """ day of week, Sunday = 1, Saturday = 7
     http://en.wikipedia.org/wiki/Zeller%27s_congruence """
    m, q = month, day
    if m == 1:
        m = 13
        year -= 1
    elif m == 2:
        m = 14
        year -= 1
    K = year % 100    
    J = year // 100
    f = (q + int(13*(m + 1)/5.0) + K + int(K/4.0))
    fg = f + int(J/4.0) - 2 * J
    fj = f + 5 - J
    if year > 1582:
        h = fg % 7
    else:
        h = fj % 7
    if h == 0:
        h = 7
    return h
2
répondu Barry Andersen 2015-05-11 17:59:41

Si vous souhaitez avoir la date en anglais:

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

Lire la suite: https://docs.python.org/2/library/datetime.html#strftime-strptime-behavior

2
répondu Kannan Ramaswamy 2018-07-25 10:07:41

Pour obtenir dimanche comme 1 à samedi comme 7, c'est la solution la plus simple à votre question:

datetime.date.today().toordinal()%7 + 1

Tous:

import datetime

today = datetime.date.today()
sunday = today - datetime.timedelta(today.weekday()+1)

for i in range(7):
    tmp_date = sunday + datetime.timedelta(i)
    print tmp_date.toordinal()%7 + 1, '==', tmp_date.strftime('%A')

Sortie:

1 == Sunday
2 == Monday
3 == Tuesday
4 == Wednesday
5 == Thursday
6 == Friday
7 == Saturday
1
répondu ox. 2014-05-09 01:47:36

Utilisation Du Module Canlendar

import calendar
a=calendar.weekday(year,month,day)
days=["MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","SUNDAY"]
print(days[a])
0
répondu Ravi Bhushan 2018-02-21 18:34:11

Voici mon implémentation python3.

months = {'jan' : 1, 'feb' : 4, 'mar' : 4, 'apr':0, 'may':2, 'jun':5, 'jul':6, 'aug':3, 'sep':6, 'oct':1, 'nov':4, 'dec':6}
dates = {'Sunday':1, 'Monday':2, 'Tuesday':3, 'Wednesday':4, 'Thursday':5, 'Friday':6, 'Saterday':0}
ranges = {'1800-1899':2, '1900-1999':0, '2000-2099':6, '2100-2199':4, '2200-2299':2}

def getValue(val, dic):
    if(len(val)==4):
        for k,v in dic.items():
            x,y=int(k.split('-')[0]),int(k.split('-')[1])
            val = int(val)
            if(val>=x and val<=y):
                return v
    else:
        return dic[val]

def getDate(val):
    return (list(dates.keys())[list(dates.values()).index(val)]) 



def main(myDate):
    dateArray = myDate.split('-')
    # print(dateArray)
    date,month,year = dateArray[2],dateArray[1],dateArray[0]
    # print(date,month,year)

    date = int(date)
    month_v = getValue(month, months)
    year_2 = int(year[2:])
    div = year_2//4
    year_v = getValue(year, ranges)
    sumAll = date+month_v+year_2+div+year_v
    val = (sumAll)%7
    str_date = getDate(val)

    print('{} is a {}.'.format(myDate, str_date))

if __name__ == "__main__":
    testDate = '2018-mar-4'
    main(testDate)
0
répondu Lasith Niroshan 2018-03-04 08:18:09

Voici comment convertir une liste de dates à ce jour

import datetime,time
ls={'1/1/2007','1/2/2017'}
dt=datetime.datetime.strptime(ls[1], "%m/%d/%Y")
print(dt)
print(dt.month)
print(dt.year)
-1
répondu Brij Bhushan Nanda 2017-07-10 02:53:17
import datetime
a = datetime.datetime.today().weekday()
if a == 0:
    print("It's Monday.")
elif a == 1:
    print("It's Tuesday.")
elif a == 2:
    print("It's Wednesday.")
elif a == 3:
    print("It's Thursday.")
elif a ==4:
    print("It's Friday.")
elif a == 5:
    print("It's Saturday.")
elif a == 6:
    print("It's Sunday.")

# please like 

:)

-4
répondu Aditya RoCk 2017-03-09 22:53:42