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)
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.
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'
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 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")
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]
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.
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)
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)]
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
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
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
Utilisation Du Module Canlendar
import calendar
a=calendar.weekday(year,month,day)
days=["MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","SUNDAY"]
print(days[a])
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)
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)
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
:)