tiempo - ¿Cómo obtengo el día de la semana una fecha en Python?
saber dia de la semana de una fecha python (15)
Aquí es cómo convertir una lista de fechas hasta la fecha
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)
Quiero averiguar lo siguiente: dada una fecha (objeto datetime
), cuál es el día correspondiente de la semana.
Por ejemplo, el domingo es el primer día, el lunes: segundo día ... y así sucesivamente
Y luego si la entrada es algo así como la fecha de hoy.
Ejemplo
>>> today = datetime.datetime(2017, 10, 20)
>>> today.get_weekday() # what I look for
La salida es quizás 6
(desde su viernes).
Aquí está mi implementación 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 __name__ == "__main__":
testDate = ''2018-mar-4''
main(testDate)
Esta es una solución si la fecha es un objeto de fecha y hora.
import datetime
def dow(date):
days=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]
dayNumber=date.weekday()
print days[dayNumber]
La biblioteca datetime a veces da errores con strptime (), así que cambié a la biblioteca dateutil. Aquí hay un ejemplo de cómo puedes usarlo:
from dateutil import parser
parser.parse(''January 11, 2010'').strftime("%a")
La salida que obtienes de esto es ''Mon''
. Si desea que la salida sea "Lunes", use lo siguiente:
parser.parse(''January 11, 2010'').strftime("%A")
Esto me funcionó bastante rápido. Estaba teniendo problemas al usar la biblioteca datetime porque quería almacenar el nombre del día de la semana en lugar del número del día de la semana y el formato del uso de la biblioteca datetime estaba causando problemas. Si no estás teniendo problemas con esto, ¡genial! Si es así, puede ir a por esto, ya que también tiene una sintaxis más simple. Espero que esto ayude.
Para obtener el domingo del 1 al sábado y del 7 al 7, esta es la solución más sencilla para su pregunta:
datetime.date.today().toordinal()%7 + 1
Todos ellos:
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'')
Salida:
1 == Sunday
2 == Monday
3 == Tuesday
4 == Wednesday
5 == Thursday
6 == Friday
7 == Saturday
Resolví esto por una 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")
Si no depende únicamente del módulo datetime
, el calendar
podría ser una mejor alternativa. Esto, por ejemplo, le proporcionará los códigos de día:
calendar.weekday(2017,12,22);
Y esto te dará el día en sí:
days = ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]
days[calendar.weekday(2017,12,22)]
O en el estilo de python, como un liner:
["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"][calendar.weekday(2017,12,22)]
Si quieres tener la fecha en inglés:
>>> from datetime import date
>>> datetime.datetime.today().strftime(''%A'')
''Wednesday''
Lea más: https://docs.python.org/2/library/datetime.html#strftime-strptime-behavior
Si quieres tener la fecha en inglés:
>>> from datetime import date
>>> import calendar
>>> my_date = date.today()
>>> calendar.day_name[my_date.weekday()]
''Wednesday''
Si tiene motivos para evitar el uso del módulo datetime, esta función funcionará.
Nota: Se supone que el cambio del calendario juliano al gregoriano ocurrió en 1582. Si esto no es cierto para su calendario de interés, cambie la línea si año> 1582: en consecuencia.
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
Suponiendo que te den el día, el mes y el año, podrías hacer:
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)
Una solución sin importaciones para fechas posteriores al 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'')
Usando el Módulo Canlendar
import calendar
a=calendar.weekday(year,month,day)
days=["MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","SUNDAY"]
print(days[a])
Utilice date.weekday()
o date.isoweekday()
.
Utilizar weekday()
( docs ):
>>> import datetime
>>> datetime.datetime.today()
datetime.datetime(2012, 3, 23, 23, 24, 55, 173504)
>>> datetime.datetime.today().weekday()
4
De la documentación:
Devuelva el día de la semana como un entero, donde el lunes es 0 y el domingo es 6.