當前位置:編程學習大全網 - 源碼下載 - C# 輸入壹個時間段 判斷 該時間段內工作日天數 (排除節假日)

C# 輸入壹個時間段 判斷 該時間段內工作日天數 (排除節假日)

寫好了,用壹個擴展方法實現,具體參考了國外壹個論壇上的答案,但是我作了壹些調整,感謝原作者Alexander!以下是截圖和核心代碼,完整的源碼在附件中,如有疑問歡迎追問。

註意:原方法寫得非常好,妳可以指定國定假日,但是在實例源碼中我並沒有用,妳自己註意看壹下。

核心代碼:

//?-----------------------------------------------------------------------

//?<copyright?file="DateTimeExtention.cs"?Author="不識臺北路">

//?TODO:?Update?copyright?text.

//?</copyright>

//?-----------------------------------------------------------------------

namespace?WorkingDays

{

using?System;

///?<summary>

///?TODO:?Update?summary.

///?</summary>

public?static?class?DateTimeExtention

{

///?<summary>

///?Calculates?number?of?business?days,?taking?into?account:

///?-?weekends?(Saturdays?and?Sundays)

///?-?bank?holidays?in?the?middle?of?the?week

///?</summary>

///?<param?name="firstDay">First?day?in?the?time?interval</param>

///?<param?name="lastDay">Last?day?in?the?time?interval</param>

///?<param?name="bankHolidays">List?of?bank?holidays?excluding?weekends</param>

///?<returns>Number?of?business?days?during?the?'span'</returns>

public?static?int?BusinessDaysUntil(this?DateTime?firstDay,?DateTime?lastDay,?params?DateTime[]?bankHolidays)

{

firstDay?=?firstDay.Date;

lastDay?=?lastDay.Date;

if?(firstDay?>?lastDay)

throw?new?ArgumentException("Incorrect?last?day?"?+?lastDay);

TimeSpan?span?=?lastDay?-?firstDay;

int?businessDays?=?span.Days?+?1;

int?fullWeekCount?=?businessDays?/?7;

//?find?out?if?there?are?weekends?during?the?time?exceedng?the?full?weeks

if?(businessDays?>?fullWeekCount?*?7)

{

//?we?are?here?to?find?out?if?there?is?a?1-day?or?2-days?weekend

//?in?the?time?interval?remaining?after?subtracting?the?complete?weeks

int?firstDayOfWeek?=?firstDay.DayOfWeek?==?DayOfWeek.Sunday7?:?(int)firstDay.DayOfWeek;

int?lastDayOfWeek?=?lastDay.DayOfWeek?==?DayOfWeek.Sunday7?:?(int)lastDay.DayOfWeek;

if?(lastDayOfWeek?<?firstDayOfWeek)

lastDayOfWeek?+=?7;

if?(firstDayOfWeek?<=?6)

{

if?(lastDayOfWeek?>=?7)//?Both?Saturday?and?Sunday?are?in?the?remaining?time?interval

businessDays?-=?2;

else?if?(lastDayOfWeek?>=?6)//?Only?Saturday?is?in?the?remaining?time?interval

businessDays?-=?1;

}

else?if?(firstDayOfWeek?<=?7?&&?lastDayOfWeek?>=?7)//?Only?Sunday?is?in?the?remaining?time?interval

businessDays?-=?1;

}

//?subtract?the?weekends?during?the?full?weeks?in?the?interval

businessDays?-=?fullWeekCount?+?fullWeekCount;

//?subtract?the?number?of?bank?holidays?during?the?time?interval

foreach?(DateTime?bankHoliday?in?bankHolidays)

{

DateTime?bh?=?bankHoliday.Date;

if?(firstDay?<=?bh?&&?bh?<=?lastDay)

--businessDays;

}

return?businessDays;

}

}

}

  • 上一篇:瑞麗到麗江多少公裏
  • 下一篇:有安能物流人工電話嗎?
  • copyright 2024編程學習大全網