创建Helper类,封装了两个方法:(获取当前日期和结束日期中所有的日期),(判断日期是否为法定节假日),话不多说直接上代码:
public static class HolidaysThisMonthHelper { /// <summary> /// 获取当前日期,结束日期的中间日期 /// </summary> /// <param name="dtmCurrent">开始时间</param> /// <param name="dtmFinishDate">结束时间</param> /// <returns></returns> public static IEnumerable<DateTime> GetMiddleDate(DateTime dtmCurrent, DateTime dtmFinishDate) { var result = new List<DateTime>(); while (dtmCurrent.ToString("yyyy-MM-dd") != dtmFinishDate.ToString("yyyy-MM-dd")) { if (dtmCurrent.ToString() != dtmFinishDate.ToString()) { result.Add(dtmCurrent); dtmCurrent = dtmCurrent.AddDays(1); } else break; } return result; } /// <summary> /// 判断是不是周末/节假日 /// </summary> /// <param name="date">日期</param> /// <returns>周末和节假日返回true,工作日返回false</returns> public static async Task<bool> IsHolidayByDate(DateTime date) { var isHoliday = false; var webClient = new System.Net.WebClient(); var PostVars = new System.Collections.Specialized.NameValueCollection { { "d", date.ToString("yyyyMMdd") }//参数 }; try { var day = date.DayOfWeek; //判断是否为周末 if (day == DayOfWeek.Sunday || day == DayOfWeek.Saturday) return true; //0为工作日,1为周末,2为法定节假日 var byteResult = await webClient.UploadValuesTaskAsync("http://tool.bitefu.net/jiari/", "POST", PostVars);//请求地址,传参方式,参数集合 var result = Encoding.UTF8.GetString(byteResult);//获取返回值 if (result == "1" || result == "2") isHoliday = true; } catch { isHoliday = false; } return isHoliday; } }
使用如下:
using HolidaysThisMonth; using System.Text; var ie = HolidaysThisMonthHelper.GetMiddleDate(Convert.ToDateTime("2022-10-01"), Convert.ToDateTime("2022-10-31")); if (ie.Any()) { var list = ie.ToList(); list.ForEach(item => { var itemBool= HolidaysThisMonthHelper.IsHolidayByDate(item); global::System.Console.WriteLine($"{item}是否为节假日:{itemBool.Result}"); }); } Console.Read();
运行结果:
由于需求需要则没有直接封装成一个获取节假日的方法,如有需要请自行封装改造哦