解决思路:将每年的所有节日获取到,然后存入数据库,数据量不多,也就十几天,至于双休日的话,程序判断就好了,有个问题就是调休的没有处理【可以加一个状态字段1表示是休息的,0表示是调休的,然后程序里面自行判断下,当然网上可能也有现成的接口,但是一般都会有调用次数限制,可以分天数,每天调一点存数据库,自行取舍】,这里用到一个接口
https://api.jiejiariapi.com/v1/holidays/2023
//每年的1月1号自动更新节假日表
var allHolidayStr = BaseHelper.Get_HttpRequest("https://api.jiejiariapi.com/v1/holidays/" + DateTime.Now.ToString("yyyy"));
if (allHolidayStr.IsNotNullOrEmpty())
{
foreach (var item in JObject.Parse(allHolidayStr))
{
var holidayDto = JsonConvert.DeserializeObject<HolidayClass>(item.Value.ToString());
if (holidayDto.isOffDay) //是节假日
{
//保存数据
TbHoliday temp = new TbHoliday() {
DateStr = DateTime.Parse(holidayDto.date)
};
bs.SaveEntity(temp);
}
}
}
/// <summary>
/// 判断当前日期是否是法定节假日
/// </summary>
/// <param name="dateTime"></param>
/// <returns></returns>
public static bool IsHoliday(DateTime dateTime)
{
BaseService bs = new BaseService();
var allHolidat = bs.GetEntities<TbHoliday>(c => true).Select(c => c.DateStr).ToList();
if ((allHolidat != null && allHolidat.Count() > 0 && allHolidat.Contains(dateTime)) || dateTime.DayOfWeek == DayOfWeek.Saturday || dateTime.DayOfWeek == DayOfWeek.Sunday)
{
return true;
}
return false;
}
//调用
IsHoliday(DateTime.Parse(nowDate).Date)