2012-01-10 13 views
14

Muszę wiedzieć, jak mogę obliczyć datę następnego piątku? Jestem nowy w Pythonie :)Jak obliczyć następny piątek w Pythonie?

Dzięki!

+1

Czy to zadanie domowe? –

+0

Nie :) chcę tylko wiedzieć, jak najlepiej to zrobić. Wiem, że coś takiego jak Dateutil może pomóc, ale nie wiem, czy warto z niego korzystać, czy nie. – KennyPowers

+8

Dlaczego ludzie zawsze pytają, czy to praca domowa? Powtarza się; jaka to różnica? – HexTree

Odpowiedz

19

Aby rozpocząć, musisz się datetime Biblioteka:

import datetime 

to trzeba datę początkową; to jest dzisiaj.

d = datetime.date.today() 

Zaczynając od tego, będziesz chciał iść dalej, aż dotrzesz do piątku. Metoda date.weekday reprezentuje poniedziałku do niedzieli jako 0 do 6, więc:

while d.weekday() != 4: 

Jeśli bieżący dzień nie jest piątek, będziesz musiał dodać dzień, jeden na raz. Aby dodać interwał czasu do obiektu date, należy użyć obiektu timedelta.

d += datetime.timedelta(1) 

umieścić to wszystko razem, a d ostatecznie zawierać date obiekt reprezentujący najbliższy piątek. Zwróć uwagę, że jeśli dzisiaj jest piątek, ten kod pojawi się dzisiaj; możesz go ulepszyć, jeśli potrzebujesz go do produkcji w następny piątek.

+0

Dziękujemy! Bardzo pomocny – KennyPowers

+0

@rolikoff FYI, gdy otrzymasz odpowiedź, która ci pomoże, możesz ją zaakceptować, klikając znacznik wyboru (patrz [faq # howtoask]). – Taymon

+0

Głosowano, ponieważ odpowiedź @ ugoren'a (ze zmianą proponowaną w komentarzach) jest zdecydowanie lepsza –

41

Pewna poprawa na @ taymon`s odpowiedź:

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

4 jest Piątkowy dzień tygodnia (0 oparte, licząc od poniedziałku).
((4-today.weekday()) % 7) to liczba dni do następnego piątku (% jest zawsze nieujemna).

Po zobaczeniu odpowiedzi @ ubuntu powinienem dodać dwie rzeczy:
1. Nie jestem pewien, czy piątek = 4 jest powszechnie prawdziwy. Niektórzy zaczynają swój tydzień w niedzielę.
2. W piątek kod ten zwraca ten sam dzień. Aby uzyskać następny, użyj (3-today.weekday())%7+1. Tylko stara konwersja x%n do ((x-1)%n)+1.

+3

Piątek zawsze wynosi 4, gdy używa się ['weekday()'] (http://docs.python.org/library/datetime.html#datetime .date.weekday) metoda. Metoda ['isoweekday()'] (http://docs.python.org/library/datetime.html#datetime.date.isoweekday) daje piątek jako 5, ponieważ traktuje od poniedziałku do niedzieli jako 1 do 7. – Taymon

+5

You może używać 'calendar.FRIDAY' zamiast' 4', jeśli nie masz nic przeciwko dodawaniu 'import calendar'. – lumbric

15

Oto w jaki sposób można to zrobić za pomocą dateutil: (. Na days = 1 argumentem zapewnia, że ​​„następny piątek” nie jest taka sama jak today w przypadku today dzieje się w piątek)

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 

Powiązane problemy