2016-11-02 13 views
1

Gibt es eine Python-Funktion, um die Anzahl der Freitage oder Donnerstage aus einem Datumsbereich abzuleiten? Ich suchte google und ich fand viele Methoden, die normalerweise Tage geteilt durch Konzept 7 verwenden, aber es gibt Ihnen die genauen Tage nicht. Zum Beispiel von 1/Nov/2016 bis 12/Nov/2016 gibt es zwei Freitage und zwei Donnerstagen, so dass das Ergebnis der Subtraktion 8 sein sollte.So finden Sie die Anzahl der Freitage/Donnerstage im Datumsbereich

Antwort

0

Verwenden Sie das date Objekt aus dem datetime Modul.

from datetime import date, timedelta 

curr = date(2016, 11, 1) 
end = date(2016, 11, 12) 
step = timedelta(1) 
num_thur_fri = 0 
while curr <= end: 
    if curr.weekday() in [3,2]: #Friday and thursday 
     num_thur_fri += 1 
    curr += step 
print(num_thur_fri) 

Mehr lesen hier: https://docs.python.org/2/library/datetime.html#module-datetime

@brianpck ist richtig, das ist eine wirklich naive Lösung. Hier ist eine bessere

from datetime import date 

begin = date(2016, 11, 1) 
end = date(2016, 11, 12) 
diff = (begin-end).days 
day_of_week = begin.weekday() 
num_thur_fri = 2*(diff//7) 
for i in range(diff%7): 
    if day_of_week in [2,3]: 
     num_thur_fri += 1 
    day_of_week = (day_of_week +1) %7 
+0

Dank, ich glaube, Sie das "t" –

+0

vermisste ich mit diesem Ansatz nicht zustimmen: es ist wie 'Summe (Bereich (n))' statt 'n * (n + 1)/2' – brianpck

+0

tatsächlich, wenn Sie vom 1/11/2016 bis zum 10/11/2016 zählen, sollte der Ausgang 3 sein, weil 10 auch Donnerstag ist, aber –

0

Hier ist ein einfacher und schneller Ansatz, der diese Zahl für längere Zeiträume berechnen wird.

Zuerst müssen Sie die Anzahl der Tage zwischen zwei datetime berechnen. Sie können dann Stock durch 7 teilen, um die Menge ganze Wochen zu erhalten und mit 2 multiplizieren, um die Anzahl der Donnerstage und Freitage zu erhalten. Der letzte Schritt ist das Modulo um sieben, um die Anzahl der Tage am Ende zu berechnen und dann zu berechnen, wie viele davon donnerstags oder freitags sind: Dieser letzte Schritt ist der einzige Schritt, der es tatsächlich erfordert zu wissen, welcher Wochentag es ist.

wäre eine volle Funktion sein:

from datetime import datetime, timedelta 

def thursday_fridays_between(date1, date2): 
    days_between = abs((date2 - date1).days) 
    thursday_friday = days_between // 7 * 2 
    thursday_friday += sum((a + timedelta(i)).weekday() in (3, 2) for i in range(days_between % 7 + 1)) 
    return thursday_friday 

Es verwendet werden können, wie folgt:

>>> a = datetime(2016, 11, 1) 
>>> b = datetime(2016, 11, 12) 
>>> thursday_fridays_between(a, b) 
4 
0

ich eine Methode herauszufinden, korrigiert mich wenn ich falsch bin.

hier ist mein Code

from datetime import date, timedelta, datetime 

curr = "1-11-2016" 
end = "30-11-2016" 
format = "%d-%m-%Y" 
start_date = datetime.strptime(curr, format) 
end_date = datetime.strptime(end, format) 

step = timedelta(1) 
num_thur_fri = 0 
off_days = ['Fri','Thu'] 

days = (end_date - start_date).days 
for x in range(days): 
    day = start_date.strftime("%a") 
    print(day) 
    if day in off_days: 
     num_thur_fri += 1 
    start_date += step 

print(num_thur_fri) 
Verwandte Themen