C 實現工作日和休息日 包括法定節假日 的計算

2022-09-13 02:03:19 字數 3376 閱讀 1353

好了,廢話不多說,開門見山。

最近在公司開發的系統中,需要計算工作日,就是給出乙個採購週期(n天),我需要計算出在n個工作日之後的日期。開始準備去調介面(ps:找了半天發現沒有太合適的,還有吐槽下國家**單位都沒有官方介面的),但是負責這個專案的大佬說,萬一別個的介面崩了,會影響我們自己的系統的正常執行,自己開發還是穩點,我就寫了這個功能,特此記錄下實現這個功能的思路。

工作日想必大家都知道,就是除去週末和每年***頒布的節假日放假安排(例如:2023年部分節假日安排),其他就都是工作日(對了,差點忘記補班,這也算是工作日哦)。

「廢話」說的夠多了,下面擼起袖子開幹吧,**都寫了注釋。

(1).根據傳入的工作日天數,獲得計算後的日期

(2).根據傳入的時間,計算工作日天數;

具體**:

1

public

class

holidayhelper26

private

static listcachedatelist

7private

holidayhelper()

8///

9///

獲得單例物件,使用懶漢式(雙重鎖定)

10///

11///

12public

static

holidayhelper getinstance()

1322}23

}24return

_instance;25}

26#endregion

2728

#region 私有方法

29///

30///

讀取檔案

31///

32///

33///

34private

string getfilecontent(string

filepath)

3541

return

result;42}

43///

44///

獲取配置的json檔案

45///

46///

經過反序列化之後的物件集合

47private listgetconfiglist()

48/../../config/holidayconfig.json"50

string filecontent =getfilecontent(path);

51if (!string

.isnullorwhitespace(filecontent))

5255

return

cachedatelist;56}

57///

58///

獲取指定年份的資料

59///

60///

61///

62private datemodel getconfigdatabyyear(int

year)

6369

///70

///判斷是否為工作日

71///

72///

要判斷的時間

73///

當前的資料

74///

75private

bool

isworkday(datetime currdate, datemodel thisyeardata)

7681

if (thisyeardata.year > 0)82

9091

if (thisyeardata.holiday.indexof(date) >= 0)92

9596

if (week != 0 && week != 6)97

100}

101return

false

;102

}103

104#endregion

105106

#region 公共方法

107public

void

cleracachedata()

108113

}114

///115

///根據傳入的工作日天數,獲得計算後的日期,可傳負數

116///

117///

天數118

///當天是否算工作日(預設:true)

119///

120public datetime getreckondate(int day, bool iscontaintoday = true

)121

139}

140return

currdate;

141}

142///

143///

根據傳入的時間,計算工作日天數

144///

145///

帶計算的時間

146///

當天是否算工作日(預設:true)

147///

148public

int getworkdaynum(datetime date, bool iscontaintoday = true

)149

159160 datemodel thisyeardata =getconfigdatabyyear(currdate.year);

161if (thisyeardata.year > 0

)162

while

(isend);

171}

172return

workdaynum;

173}

174#endregion

175}

176177

public

struct

datemodel

178180

181public list work

182183

public list holiday

184 }

view code

說明下,法定節假日我是自己用json來配置的,大家可以自己維護,或者做成自己的介面。下面展示下json的格式,這是我自己配置的(2015-2023年),大家可以按照自己的需求來修改。

1[2

,7,12

17 ]

holidayconfig.json

好了,就說這麼多,由於能力有限,有寫得不好的地方,歡迎指正、補充。如果對您有幫助,請幫忙點個贊,謝謝!

是否是工作日和節假日判定

根據節假日表分析當前日期是否屬於節假日配置表的時間以及判定當前日期是否屬於雙休日 首先建一張節假日表pricingholiday id 節假日時間 hdate 是否工作日 htype 2表示不上班 非工作日,1表示正常上班 工作日 判定 private string strworkingdayam ...

是否是工作日和節假日判定

根據節假日表分析當前日期是否屬於節假日配置表的時間以及判定當前日期是否屬於雙休日 首先建一張節假日表pricingholiday id 節假日時間 hdate 是否工作日 htype 2表示不上班 非工作日,1表示正常上班 工作日 判定 private string strworkingdayam ...

計算有效工作日(跳過節假日)

在實際開發過程中,我們很多時候會遇到節假日處理的問題。由於前段時間工作需要,所以通過各種平台蒐集資料,整理出下面的 備註 主要是給定乙個初始日期,然後給定乙個時間範圍,要求自動跳過節假日以及雙休日,最後返回乙個工作日的日期,具體 如下 根據指定日期,計算出給定時間間隔的下乙個工作日的日期 給定的日期...