2012-01-10 20 views
14

Devo sapere come posso calcolare la data del prossimo venerdì? Sono nuovo di Python :)Come calcolare il prossimo venerdì in Python?

Grazie!

+1

Questi compiti? –

+0

No :) voglio solo sapere il modo migliore per farlo. So che c'è qualcosa come dateutil potrebbe aiutare a farlo, ma non è sicuro che valga la pena di usarlo o no – KennyPowers

+8

Perché le persone chiedono sempre se si tratta di compiti a casa? Diventa ripetitivo; che differenza avrebbe fatto? – HexTree

risposta

19

Per cominciare, è necessario biblioteca datetime:

import datetime 

allora avete bisogno di una data di inizio; cioè, oggi.

d = datetime.date.today() 

Partendo da lì, si vorrebbe continuare ad andare avanti fino al venerdì. Il metodo date.weekday rappresenta Lunedi a Domenica come 0 a 6, in modo da:

while d.weekday() != 4: 

Se il giorno corrente non è Venerdì, dovrete aggiungere un giorno, una alla volta. Per aggiungere un intervallo di tempo a un oggetto date, si utilizza un oggetto timedelta.

d += datetime.timedelta(1) 

mettere tutto insieme, e d in ultima analisi contenere un oggetto che rappresenta date prossimo Venerdì. Nota che se oggi è venerdì, questo codice produrrà oggi; puoi modificarlo se ne hai bisogno per produrre venerdì prossimo invece.

+0

Grazie! Molto utile – KennyPowers

+0

@rolikoff FYI, quando ottieni una risposta che ti aiuta, puoi accettarla facendo clic sul segno di spunta (vedi [faq # howtoask]). – Taymon

+0

Votato perché la risposta di @ ugoren (con modifica proposta nei commenti) è strettamente migliore –

41

Un certo miglioramento rispetto @ taymon`s risposta:

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

4 è giorno della settimana di Venerdì (0 sulla base, a partire dal Lunedi).
((4-today.weekday()) % 7) è il numero di giorni fino al venerdì successivo (% è sempre non negativo).

Dopo aver visto la risposta di @ ubuntu, dovrei aggiungere due cose:
1. Non sono sicuro che venerdì = 4 sia universalmente vero. Alcune persone iniziano la settimana di domenica.
2. Il venerdì, questo codice restituisce lo stesso giorno. Per ottenere il prossimo, utilizzare (3-today.weekday())%7+1. Solo la vecchia conversione da x%n a ((x-1)%n)+1.

+3

Venerdì è sempre 4 quando si utilizza il ['feriale()'] (http://docs.python.org/library/datetime.html#datetime .date.weekday) metodo. Il metodo ['isoweekday()'] (http://docs.python.org/library/datetime.html#datetime.date.isoweekday) dà il venerdì come 5, perché tratta dal lunedì alla domenica come da 1 a 7. – Taymon

+5

Tu puoi usare 'calendar.FRIDAY' invece di' 4' se non ti dispiace aggiungere 'import calendar'. – lumbric

15

Ecco come si potrebbe fare utilizzando dateutil: (. L'argomento days = 1 assicura che il "Venerdì prossimo" non è lo stesso che today nel caso in cui today capita di essere un Venerdì)

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 

Problemi correlati