1. 程式人生 > >C#跳過工作日,計算幾個工作日之後到期的方法

C#跳過工作日,計算幾個工作日之後到期的方法

double helper == spa public data- return mes cal

需求:消費者投訴企業,企業在2個工作日之內做出應答。

分析:1.工作日要刨去周末和法定節假日,而且每年的節假日不一樣。

2.消費者可以在任意時間發起投訴,如果在非工作日發起了投訴,那麽計算時間應該從工作日開始計算,就要刨去當日的時和分。

以下是代碼:

技術分享
public class HolidayHelper

    {

        /// <summary>

        /// 判斷法定工作日

        /// </summary>

        /// <param name="dt">時間</param>

        /// <returns>
0上班,1不需要上班的周末(也包括節假日),2法定節假日</returns> public static int IsHolidayOrWeek(DateTime dt) { //特殊的周末(周末卻上班) string[] specalWeek2009 = { "0104", "0124", "0201", "0531", "0927", "1010" }; string[] specalWeek2010 = { "0220", "0221", "0612", "0613", "0919", "0925", "0926
", "1009" }; string[] specalWeek2011 = { "0130", "0212", "0402", "1008", "1009" }; string[] specalWeek2012 = { "0129", "0331", "0401", "0428", "0929" }; string[] specalWeek2013 = { "0105", "0106", "0216", "0217", "0407", "0427", "0428", "0608", "0609", "0922", "0929", "1012" }; string
[] specalWeek2014 = { "0126", "0208", "0504", "0928", "1011" }; string[] specalWeek2015 = { "0104", "0215", "0228", "0906", "1010" }; string[] specalWeek2016 = { "0206", "0214", "0612", "0918", "1008", "1009" }; string[] specalWeek2017 = { "0122", "0204", "0401", "0527", "0930" }; //法定假日 string[] holiday2009 = { "0101", "0102", "0103", "0125", "0126", "0127", "0128", "0129", "0130", "0131", "0404", "0405", "0406", "0501", "0502", "0503", "0528", "0529", "0530", "1001", "1002", "1003", "1004", "1005", "1006", "1007", "1008", }; string[] holiday2010 = { "0101", "0102", "0103", "0213", "0214", "0215", "0216", "0217", "0218", "0219", "0403", "0404", "0405", "0501", "0502", "0503", "0614", "0615", "0616", "0922", "0923", "0924", "1001", "1002", "1003", "1004", "1005", "1006", "1007" }; string[] holiday2011 = { "0101", "0102", "0103", "0202", "0203", "0204", "0205", "0206", "0207", "0208", "0403", "0404", "0405", "0430", "0501", "0502", "0604", "0605", "0606", "0910", "0911", "0912", "1001", "1002", "1003", "1004", "1005", "1006", "1007", }; string[] holiday2012 = { "0101", "0102", "0103", "0122", "0123", "0124", "0125", "0126", "0127", "0128", "0402", "0403", "0404", "0429", "0430", "0501", "0622", "0623", "0624", "0930", "1001", "1002", "1003", "1004", "1005", "1006", "1007", }; string[] holiday2013 = { "0101", "0102", "0103", "0209", "0210", "0211", "0212", "0213", "0214", "0215", "0404", "0405", "0406", "0429", "0430", "0501", "0610", "0611", "0612", "0919", "0920", "0921", "1001", "1002", "1003", "1004", "1005", "1006", "1007", }; string[] holiday2014 = { "0101", "0131", "0201", "0202", "0203", "0204", "0205", "0206", "0405", "0406", "0407", "0501", "0502", "0503", "0602", "0908", "1001", "1002", "1003", "1004", "1005", "1006", "1007", }; string[] holiday2015 = { "0101", "0102", "0103", "0218", "0219", "0220", "0221", "0222", "0223", "0224", "0404", "0405", "0406", "0501", "0502", "0503", "0620", "0621", "0622", "0903", "0904", "0905", "0927", "1001", "1002", "1003", "1004", "1005", "1006", "1007", }; string[] holiday2016 = { "0101", "0207", "0208", "0209", "0210", "0211", "0212", "0213", "0404", "0501", "0502", "0609", "0610", "0611", "0915", "0916", "0917", "1001", "1002", "1003", "1004", "1005", "1006", "1007", }; string[] holiday2017 = { "0101", "0102", "0127", "0128", "0129", "0130", "0131", "0201", "0202", "0403", "0404", "0501", "0529", "0530", "1001", "1002", "1003", "1004", "1005", "1006", }; bool isHoildayOrWeek = false; //取年 string weekYear = dt.Year.ToString(); //取月日 string[] weekDate = { dt.ToString("MMdd") }; //判斷周末 if ((int)dt.DayOfWeek == 0 || (int)dt.DayOfWeek == 6) { //周末是否需要上班 switch (weekYear) { case "2009": isHoildayOrWeek = specalWeek2009.Intersect(weekDate).Count() == 0; break; case "2010": isHoildayOrWeek = specalWeek2010.Intersect(weekDate).Count() == 0; break; case "2011": isHoildayOrWeek = specalWeek2011.Intersect(weekDate).Count() == 0; break; case "2012": isHoildayOrWeek = specalWeek2012.Intersect(weekDate).Count() == 0; break; case "2013": isHoildayOrWeek = specalWeek2013.Intersect(weekDate).Count() == 0; break; case "2014": isHoildayOrWeek = specalWeek2014.Intersect(weekDate).Count() == 0; break; case "2015": isHoildayOrWeek = specalWeek2015.Intersect(weekDate).Count() == 0; break; case "2016": isHoildayOrWeek = specalWeek2016.Intersect(weekDate).Count() == 0; break; case "2017": isHoildayOrWeek = specalWeek2017.Intersect(weekDate).Count() == 0; break; } } if (isHoildayOrWeek) { return 1; } //判斷法定節假日 switch (weekYear) { case "2009": isHoildayOrWeek = holiday2009.Intersect(weekDate).Count() > 0; break; case "2010": isHoildayOrWeek = holiday2010.Intersect(weekDate).Count() > 0; break; case "2011": isHoildayOrWeek = holiday2011.Intersect(weekDate).Count() > 0; break; case "2012": isHoildayOrWeek = holiday2012.Intersect(weekDate).Count() > 0; break; case "2013": isHoildayOrWeek = holiday2013.Intersect(weekDate).Count() > 0; break; case "2014": isHoildayOrWeek = holiday2014.Intersect(weekDate).Count() > 0; break; case "2015": isHoildayOrWeek = holiday2015.Intersect(weekDate).Count() > 0; break; case "2016": isHoildayOrWeek = holiday2016.Intersect(weekDate).Count() > 0; break; case "2017": isHoildayOrWeek = holiday2017.Intersect(weekDate).Count() > 0; break; } if (isHoildayOrWeek) { return 2; } return 0; } /// <summary> /// 工作日時間差 /// </summary> /// <param name="days">幾個工作日後</param> /// <returns>延遲毫秒數</returns> public static double GetDelpyTime(int days) { int sign = 0; for (int i = 0; i < days; i++) { if (i == 0 && IsHolidayOrWeek(DateTime.Now.AddDays(i)) > 0) { //非工作日發起的投訴,要抹掉小時和分鐘 sign = 1; } if (IsHolidayOrWeek(DateTime.Now.AddDays(i)) > 0) { days = days + 1; }; } TimeSpan ts = new TimeSpan(); if (sign == 1) { ts = (DateTime.Now.AddDays(days) - DateTime.Now.AddHours(DateTime.Now.Hour).AddMinutes(DateTime.Now.Minute)); } else { ts = DateTime.Now.AddDays(days) - DateTime.Now; } return ts.TotalMilliseconds; } }
View Code

謝謝大家。

打賞隨意:

技術分享

C#跳過工作日,計算幾個工作日之後到期的方法