2012-01-10 21 views
14

Necesito saber cómo puedo calcular la fecha del próximo viernes? Soy nuevo en Python :)¿Cómo calcular el próximo viernes en Python?

Gracias!

+1

¿Es esta tarea? –

+0

No :) solo quiero saber la mejor manera de hacerlo. Sé que algo como dateutil podría ayudar a hacer eso, pero no estoy seguro si vale la pena usarlo o no – KennyPowers

+8

¿Por qué la gente siempre pregunta si es tarea? Se vuelve repetitivo; ¿Qué diferencia haría? – HexTree

Respuesta

19

Para empezar, debes contar con la biblioteca datetime:

import datetime 

Luego hay una fecha de inicio; es decir, hoy.

d = datetime.date.today() 

A partir de allí, tendrá que seguir adelante hasta llegar al viernes. El método date.weekday representa lunes a domingo de 0 a 6, por lo que:

while d.weekday() != 4: 

Si el día actual no es el viernes, que tendrá que añadir un día, una a la vez. Para agregar un intervalo de tiempo a un objeto date, utiliza un objeto timedelta.

d += datetime.timedelta(1) 

poner todo junto, y en última instancia, d contener un objeto que representa date próximo viernes. Tenga en cuenta que si hoy es viernes, este código se producirá hoy; puede modificarlo si lo necesita para producir el próximo viernes en su lugar.

+0

¡Gracias! Muy útil – KennyPowers

+0

@rolikoff FYI, cuando recibe una respuesta que lo ayuda, puede aceptarla haciendo clic en la marca de verificación (vea [faq # howtoask]). – Taymon

+0

Votado abajo porque la respuesta de @ugoren (con el cambio propuesto en los comentarios) es estrictamente mejor –

41

Una cierta mejora con respecto a @ taymon`s respuesta:

today = datetime.date.today() 
friday = today + datetime.timedelta((4-today.weekday()) % 7) 

4 es de lunes a viernes del viernes (0 basada, a contar 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 si Friday = 4 es universalmente cierto. Algunas personas comienzan su semana los domingos.
2. El viernes, este código regresa el mismo día. Para obtener el siguiente, use (3-today.weekday())%7+1. Solo la antigua conversión x%n a ((x-1)%n)+1.

+3

El viernes siempre es 4 cuando se usa ['weekday()'] (http://docs.python.org/library/datetime.html#datetime .date.weekday) método. El método ['isoweekday()'] (http://docs.python.org/library/datetime.html#datetime.date.isoweekday) da el viernes como 5, porque trata de lunes a domingo del 1 al 7. – Taymon

+5

Usted puede usar 'calendar.Viernes 'en lugar de' 4' si no le importa agregar 'import calendar'. – lumbric

15

Aquí es cómo usted puede hacerlo usando dateutil: (. El argumento days = 1 asegura que el "próximo viernes" no es lo mismo que today en caso de today pasa a ser un viernes)

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 

Cuestiones relacionadas