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.
>>> today = datetime.datetime(2017, 10, 20)
>>> today.get_weekday() # what I look for
La sortie est peut-être 6
(depuis son vendredi)
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.
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'
Utilisez date.weekday()
ou date.isoweekday()
.
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")
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
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 (), 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.
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)
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
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)]
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
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
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)
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)
Utilisation du module de calendrier
import calendar
a=calendar.weekday(year,month,day)
days=["MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","SUNDAY"]
print(days[a])
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)
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 ...
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()])
08 05 2015
Friday
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