好了,廢話不多說,開門見山。
最近在公司開發的系統中,需要計算工作日,就是給出乙個採購週期(n天),我需要計算出在n個工作日之後的日期。開始準備去調介面(ps:找了半天發現沒有太合適的,還有吐槽下國家**單位都沒有官方介面的),但是負責這個專案的大佬說,萬一別個的介面崩了,會影響我們自己的系統的正常執行,自己開發還是穩點,我就寫了這個功能,特此記錄下實現這個功能的思路。
工作日想必大家都知道,就是除去週末和每年***頒布的節假日放假安排(例如:2023年部分節假日安排),其他就都是工作日(對了,差點忘記補班,這也算是工作日哦)。
「廢話」說的夠多了,下面擼起袖子開幹吧,**都寫了注釋。
(1).根據傳入的工作日天數,獲得計算後的日期
(2).根據傳入的時間,計算工作日天數;
具體**:
1view codepublic
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 }
說明下,法定節假日我是自己用json來配置的,大家可以自己維護,或者做成自己的介面。下面展示下json的格式,這是我自己配置的(2015-2023年),大家可以按照自己的需求來修改。
1[2holidayconfig.json,7,12
17 ]
好了,就說這麼多,由於能力有限,有寫得不好的地方,歡迎指正、補充。如果對您有幫助,請幫忙點個贊,謝謝!
是否是工作日和節假日判定
根據節假日表分析當前日期是否屬於節假日配置表的時間以及判定當前日期是否屬於雙休日 首先建一張節假日表pricingholiday id 節假日時間 hdate 是否工作日 htype 2表示不上班 非工作日,1表示正常上班 工作日 判定 private string strworkingdayam ...
是否是工作日和節假日判定
根據節假日表分析當前日期是否屬於節假日配置表的時間以及判定當前日期是否屬於雙休日 首先建一張節假日表pricingholiday id 節假日時間 hdate 是否工作日 htype 2表示不上班 非工作日,1表示正常上班 工作日 判定 private string strworkingdayam ...
計算有效工作日(跳過節假日)
在實際開發過程中,我們很多時候會遇到節假日處理的問題。由於前段時間工作需要,所以通過各種平台蒐集資料,整理出下面的 備註 主要是給定乙個初始日期,然後給定乙個時間範圍,要求自動跳過節假日以及雙休日,最後返回乙個工作日的日期,具體 如下 根據指定日期,計算出給定時間間隔的下乙個工作日的日期 給定的日期...