una tiempo sumar semana saber restar obtener fechas fecha con clase python datetime weekday

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



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.