web-dev-qa-db-fra.com

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

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

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

Et 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)

405
Fraz

Utilisez 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, lundi étant à 0 et dimanche à 6.

671
Simeon Visser

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'
218
seddonym
37
orlp

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')

J'ai résolu ceci pour un codechef question .

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
Ashwini Chaudhary

Si vous souhaitez avoir la date en anglais:

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

En savoir plus: https://docs.python.org/2/library/datetime.html#strftime-strptime-behavior

11
Kannan Ramaswamy

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]
10
Rodrigo

la bibliothèque datetime donne parfois des erreurs avec strptime (), je suis donc passé à la bibliothèque dateutil. Voici un exemple d'utilisation de ce logiciel:

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

Le résultat obtenu est 'Mon'. Si vous voulez que la sortie soit «lundi», 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 car je voulais stocker le nom du jour de la semaine au lieu de son numéro et le format d'utilisation de la bibliothèque datetime posait problème. Si vous n'avez pas de problèmes avec ça, c'est parfait! Si tel est le cas, vous pouvez vous en tenir à cela, car sa syntaxe est également plus simple. J'espère que cela t'aides.

7
Shashwat Siddhant

En supposant que vous ayez le jour, le mois et l’année, vous pourriez 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)
6
mathwizurd

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

Remarque: le changement du calendrier julien au calendrier grégorien est supposé avoir eu lieu en 1582. Si ce n'est pas le cas pour votre calendrier qui vous intéresse, changez 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
4
Barry Andersen

Si vous ne vous fiez pas uniquement au module datetime, calendar 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 du python, en une doublure:

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

Nous pouvons prendre l'aide de Pandas:

import pandas as pd

Comme mentionné ci-dessus dans le problème, nous avons:

datetime(2017, 10, 20)

Si vous exécutez cette ligne dans le cahier jupyter, nous obtenons une sortie comme celle-ci:

datetime.datetime(2017, 10, 20, 0, 0)

Utilisation de jour de la semaine () et nom de jour de la semaine:

Si vous voulez les jours de la semaine sous forme de nombre entier, utilisez:

pd.to_datetime(datetime(2017, 10, 20)).weekday()

La sortie sera:

4

Et si vous le souhaitez comme nom du jour comme dimanche, lundi, vendredi, etc., vous pouvez utiliser:

pd.to_datetime(datetime(2017, 10, 20)).weekday_name

La sortie sera:

'Friday'

Si vous avez une colonne de dates dans le cadre de données Pandas, alors:

Supposons maintenant que si vous avez un cadre de données pandas ayant une colonne de date comme celle-ci:

0   2010-04-01
1   2010-04-02
2   2010-04-03
3   2010-04-04
4   2010-04-05
Name: Dates, dtype: datetime64[ns]

Maintenant, si nous voulons connaître le nom du jour de la semaine comme lundi, mardi, etc. nous pouvons utiliser .weekday_name comme suit:

pdExampleDataFrame.head(5)['Dates'].dt.weekday_name

la sortie sera:

0    Thursday
1      Friday
2    Saturday
3      Sunday
4      Monday
Name: Dates, dtype: object

Et si nous voulons le nombre entier de jours de la semaine de cette colonne Dates, nous pouvons utiliser:

pdExampleDataFrame.head(5)['Dates'].apply(lambda x: x.weekday())

La sortie ressemblera à ceci:

0    3
1    4
2    5
3    6
4    0
Name: Dates, dtype: int64
2
Yogesh

Pour que les dimanches 1 à samedi soient 7, voici 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
2
ox.

voici comment convertir une liste de dates à date

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)
2
Brij Bhushan Nanda

Voici mon implémentation de 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 __== "__main__":
    testDate = '2018-mar-4'
    main(testDate)
1
Lasith Niroshan

Utilisation du module de calendrier

import calendar
a=calendar.weekday(year,month,day)
days=["MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","SUNDAY"]
print(days[a])
1
Ravi Bhushan

Disons que vous avez timeStamp: Variable de chaîne, AAAA-MM-JJ HH: MM: SS

étape 1 : convertissez-le en fonction dateTime avec code de coup ...

df['timeStamp'] = pd.to_datetime(df['timeStamp'])

Étape 2 : Maintenant, vous pouvez extraire toutes les fonctionnalités requises comme ci-dessous, ce qui créera une nouvelle colonne pour chaque heure fild, mois, jour de la semaine, année, date

df['Hour'] = df['timeStamp'].apply(lambda time: time.hour)
df['Month'] = df['timeStamp'].apply(lambda time: time.month)
df['Day of Week'] = df['timeStamp'].apply(lambda time: time.dayofweek)
df['Year'] = df['timeStamp'].apply(lambda t: t.year)
df['Date'] = df['timeStamp'].apply(lambda t: t.day)
1
Shiva_Achari
import datetime
int(datetime.datetime.today().strftime('%w'))+1

cela devrait vous donner votre numéro de jour réel - 1 = dimanche, 2 = lundi, etc ...

0
neoghost
import datetime
import calendar

day, month, year = map(int, input().split())
my_date = datetime.date(year, month, day)
print(calendar.day_name[my_date.weekday()])

Échantillon de sortie

08 05 2015
Friday
0
Satish Kumar Yadav

Si vous avez des dates sous forme de chaîne, il serait peut-être plus facile de le faire en utilisant l'horodatage de pandas.

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

Sortie:

4 Friday
0
Vlad Bezden