2011-08-29 10 views
5

Find day difference between two dates (excluding weekend days) पर एक ही समस्या है लेकिन यह जावास्क्रिप्ट के लिए है। पायथन में ऐसा कैसे करें?पायथन में दो डेटटाइम (सप्ताहांत दिनों को छोड़कर) के बीच दिन का अंतर खोजें?

+0

यह प्रश्न एक भाषा स्रोत कोड का एक दूसरे के लिप्यंतरण के लिए पूछ रहा है। – Arafangion

उत्तर

7

scikits.timeseries साथ यह प्रयास करें:

import scikits.timeseries as ts 
import datetime 

a = datetime.datetime(2011,8,1) 
b = datetime.datetime(2011,8,29) 

diff_business_days = ts.Date('B', b) - ts.Date('B', a) 
# returns 20 

या dateutil साथ:

import datetime 
from dateutil import rrule 

a = datetime.datetime(2011,8,1) 
b = datetime.datetime(2011,8,29) 

diff_business_days = len(list(rrule.rrule(rrule.DAILY, 
              dtstart=a, 
              until=b - datetime.timedelta(days=1), 
              byweekday=(rrule.MO, rrule.TU, rrule.WE, rrule.TH, rrule.FR)))) 

scikits.timeseries depricated देखो: http://pytseries.sourceforge.net/

पांडा के साथ बजाय कोई कर सकते हैं:

import pandas as pd 

a = datetime.datetime(2015, 10, 1) 
b = datetime.datetime(2015, 10, 29) 

diff_calendar_days = pd.date_range(a, b).size 
diff_business_days = pd.bdate_range(a, b).size 
1

यकीन है कि ऐसा नहीं है कि यह सबसे अच्छा एक समाधान है, लेकिन यह मेरे लिए काम करता है:

from datetime import datetime, timedelta 

startDate = datetime(2011, 7, 7) 
endDate = datetime(2011, 10, 7) 
dayDelta = timedelta(days=1) 
diff = 0 
while startDate != endDate: 
    if startDate.weekday() not in [5,6]: 
     diff += 1 
    startDate += dayDelta 
+2

या 2 * (दिनों की संख्या // 7) घटाएं और फिर सप्ताह में शुरुआत और समाप्ति दिनों की स्थिति के लिए समायोजित करें यदि आप कुछ तेज़ी से चाहते हैं। – agf

2

यहाँ एक हे (1) जटिलता वर्ग समाधान जो केवल अंतर्निहित पायथन पुस्तकालयों का उपयोग करता है है।

यह समय अंतराल की लंबाई के बावजूद निरंतर प्रदर्शन करता है और तर्क आदेश की परवाह नहीं करता है।

# 
# by default, the last date is not inclusive 
# 
def workdaycount(first, second, inc = 0): 
    if first == second: 
     return 0 
    import math 
    if first > second: 
     first, second = second, first 
    if inc: 
     from datetime import timedelta 
     second += timedelta(days=1) 
    interval = (second - first).days 
    weekspan = int(math.ceil(interval/7.0)) 
    if interval % 7 == 0: 
     return interval - weekspan * 2 
    else: 
     wdf = first.weekday() 
     if (wdf < 6) and ((interval + wdf) // 7 == weekspan): 
     modifier = 0 
     elif (wdf == 6) or ((interval + wdf + 1) // 7 == weekspan): 
     modifier = 1 
     else: 
     modifier = 2 
     return interval - (2 * weekspan - modifier) 

# 
# sample usage 
# 
print workdaycount(date(2011, 8, 15), date(2011, 8, 22)) # returns 5 
print workdaycount(date(2011, 8, 15), date(2011, 8, 22), 1) # last date inclusive, returns 6 
संबंधित मुद्दे