¿Cómo calcular el próximo viernes?

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