¿Cómo puedo calcular la fecha del próximo viernes?
Para empezar, necesitarás la biblioteca datetime
:
import datetime
Entonces necesitas una fecha de inicio; Es decir, hoy.
d = datetime.date.today()
A partir de ahí, querrá seguir avanzando hasta llegar al viernes. El método date.weekday
representa de lunes a domingo de 0 a 6, por lo que:
while d.weekday() != 4:
Si el día actual no es viernes, tendrá que agregar un día, uno a la vez. Para agregar un intervalo de tiempo a un objeto de date
, utiliza un objeto timedelta
.
d += datetime.timedelta(1)
Póngalo todo junto y, finalmente, d
contendrá un objeto de date
que representa el próximo viernes. Tenga en cuenta que si hoy es viernes, este código producirá hoy; Puedes modificarlo si lo necesitas para producir el próximo viernes.
Una cierta mejora en la respuesta de @taymon:
today = datetime.date.today() friday = today + datetime.timedelta( (4-today.weekday()) % 7 )
4 es el día de la semana del viernes (0 basado, contando desde el lunes).
( (4-today.weekday()) % 7)
es el número de días hasta el próximo viernes ( %
siempre es no negativo).
Después de ver la respuesta de @ ubuntu, debo agregar dos cosas:
1. No estoy seguro de si el viernes = 4 es universalmente cierto. Algunas personas comienzan su semana el domingo.
2. El viernes, este código devuelve el mismo día. Para obtener el siguiente, use (3-today.weekday())%7+1
. Solo la conversión anterior de x%n
a ((x-1)%n)+1
.
Aquí es cómo puedes hacerlo usando dateutil :
import datetime as DT import dateutil.relativedelta as REL today = DT.date.today() print(today) # 2012-01-10 rd = REL.relativedelta(days=1, weekday=REL.FR) next_friday = today + rd print(next_friday) # 2012-01-13
(El argumento days = 1
garantiza que el “próximo viernes” no sea el mismo que el de today
en caso de que today
sea un viernes).
Solo para facilitar la lectura utilizaría strftime (‘% A’) en lugar de laborable ():
import datetime d = datetime.date.today() while d.strftime('%a') != 'Fri': d += datetime.timedelta(1)