python獲取兩個日期間的工作日

2022-01-12 20:39:27 字數 2108 閱讀 8220

import

datetime

#計算兩個日期之間的工作日數,非天數.

class

workdays():

def__init__(self, start_date, end_date, days_off=none):

"""days_off:休息日,預設週六日, 以0(星期一)開始,到6(星期天)結束, 傳入tupple

沒有包含法定節假日,

"""self.start_date =start_date

self.end_date =end_date

self.days_off =days_off

if self.start_date >self.end_date:

self.start_date,self.end_date =self.end_date, self.start_date

if days_off is

none:

self.days_off = 5,6

#每週工作日列表

self.days_work = [x for x in range(7) if x not

inself.days_off]

defworkdays(self):

"""實現工作日的 iter, 從start_date 到 end_date , 如果在工作日內,yield 日期

"""#

還沒排除法定節假日

tag_date =self.start_date

while

true:

if tag_date >self.end_date:

break

if tag_date.weekday() in

self.days_work:

yield

tag_date

tag_date += datetime.timedelta(days=1)

defdayscount(self):

"""工作日統計,返回數字

"""return

len(list(self.workdays()))

def weekscount(self, day_start=0):

"""統計所有跨越的週數,返回數字

預設周從星期一開始計算

"""day_nextweek =self.start_date

while

true:

if day_nextweek.weekday() ==day_start:

break

day_nextweek += datetime.timedelta(days=1)

#區間在一周內

if day_nextweek >self.end_date:

return 1weeks = ((self.end_date - day_nextweek).days + 1)/7weeks =int(weeks)

if ((self.end_date - day_nextweek).days + 1)%7:

weeks += 1

if self.start_date weeks += 1

return weeks

獲取結果:

import

datetime

startdate = datetime.datetime(2018,1,11,20,20,20)

enddate = datetime.datetime(2019,1,11,20,20,20)

work =workdays(startdate,enddate) # 需要傳入兩個datetime格式日期

print

(list(work.workdays())) # 獲取乙個元素為datetime日期格式的工作日期列表

print

(work.dayscount()) # 獲取工作日期的天數

print

(work.weekscount()) # 獲取非工作日的天數

for i in

work.workdays(): # 獲取每乙個工作日期

print

(i)print(dir(work)) # 獲取work的所有方法

Python獲取兩個日期之間的列表

獲取兩個日期之間的日期列表如 輸入2012 09 21 2013 10 21 得到的結果為 2012 09 21,2012 09 22等等一直到2013 10 21 呼叫get date list函式傳入乙個時間範圍列表 如get date list 1,2012 09 21 2013 10 21 ...

Python獲取兩個日期之間的列表

獲取兩個日期之間的日期列表如 輸入2012 09 21 2013 10 21 得到的結果為 2012 09 21,2012 09 22等等一直到2013 10 21 呼叫get date list函式傳入乙個時間範圍列表 如get date list 1,2012 09 21 2013 10 21 ...

獲取兩個日期之間天數

本人根據開發經驗,目前總結了3種方法 第一種 根據兩個日期間毫秒數計算,同理任何日期型別都可以轉換為對應的毫秒數 public static int daysbetween long time1,long time2 第二種 jdk8 localdate提供了toepochday 方法 1 將日期d...