/// <summary>
/// 判断是否为周末或节假日
/// </summary>
/// <param name="date">日期</param>
/// <returns>如果是周末或节假日返回true,否则返回false</returns>
public static async Task<bool> IsHolidayByDate(DateTime date)
{
try
{
// 判断是否为周末
if (IsWeekend(date))
{
return true;
}
// 判断是否为节假日
return await IsPublicHoliday(date);
}
catch (Exception ex)
{
// 日志记录异常(可选)
// LogError(ex);
return false;
}
}
/// <summary>
/// 判断是否为周末
/// </summary>
/// <param name="date">日期</param>
/// <returns>如果是周末返回true,否则返回false</returns>
private static bool IsWeekend(DateTime date)
{
var day = date.DayOfWeek;
return day == DayOfWeek.Saturday || day == DayOfWeek.Sunday;
}
/// <summary>
/// 判断是否为法定节假日
/// </summary>
/// <param name="date">日期</param>
/// <returns>如果是节假日返回true,否则返回false</returns>
private static async Task<bool> IsPublicHoliday(DateTime date)
{
var webClient = new System.Net.WebClient();
var postVars = new System.Collections.Specialized.NameValueCollection
{
{ "d", date.ToString("yyyyMMdd") } // 日期参数
};
try
{
var byteResult = await webClient.UploadValuesTaskAsync("http://tool.bitefu.net/jiari/", "POST", postVars);
var result = Encoding.UTF8.GetString(byteResult); // 获取返回值
return result == "1" || result == "2"; // 1为周末,2为节假日
}
catch
{
// 网络请求异常,返回false
return false;
}
}
完整示例
下面是一个完整的 C# 示例,判断某天是否是周末或节假日,并且包含了详细的注释说明。
using System;
using System.Collections.Specialized;
using System.Net;
using System.Text;
using System.Threading.Tasks;
class Program
{
/// <summary>
/// 判断给定的日期是否为周末或节假日
/// </summary>
/// <param name="date">待判断的日期</param>
/// <returns>如果是周末或节假日返回true,否则返回false</returns>
public static async Task<bool> IsHolidayByDate(DateTime date)
{
try
{
// 判断是否为周末
if (IsWeekend(date))
{
return true; // 如果是周末,直接返回true
}
// 判断是否为节假日
return await IsPublicHoliday(date); // 调用方法检查是否为节假日
}
catch (Exception ex)
{
// 捕获并处理任何异常
// 例如网络请求失败等
Console.WriteLine($"出现异常: {ex.Message}");
return false; // 出现异常时返回false
}
}
/// <summary>
/// 判断给定的日期是否为周末(星期六或星期天)
/// </summary>
/// <param name="date">待判断的日期</param>
/// <returns>如果是周末返回true,否则返回false</returns>
private static bool IsWeekend(DateTime date)
{
// 获取日期的星期几
var dayOfWeek = date.DayOfWeek;
// 判断是否是星期六或星期天
return dayOfWeek == DayOfWeek.Saturday || dayOfWeek == DayOfWeek.Sunday;
}
/// <summary>
/// 判断给定的日期是否为法定节假日
/// 通过调用第三方接口判断节假日
/// </summary>
/// <param name="date">待判断的日期</param>
/// <returns>如果是节假日返回true,否则返回false</returns>
private static async Task<bool> IsPublicHoliday(DateTime date)
{
var webClient = new WebClient(); // 创建一个WebClient实例
var postVars = new NameValueCollection
{
{ "d", date.ToString("yyyyMMdd") } // 传递日期参数(格式为yyyyMMdd)
};
try
{
// 使用POST请求发送数据,获取返回结果
var byteResult = await webClient.UploadValuesTaskAsync("http://tool.bitefu.net/jiari/", "POST", postVars);
// 将返回的字节数据转换为字符串
var result = Encoding.UTF8.GetString(byteResult);
// 返回是否为节假日
// 如果返回值是 "1" 或 "2",表示是节假日
return result == "1" || result == "2";
}
catch (Exception ex)
{
// 捕获异常,输出错误信息
Console.WriteLine($"网络请求错误: {ex.Message}");
return false; // 如果请求失败,返回false
}
}
static async Task Main(string[] args)
{
// 测试日期
var testDate = new DateTime(2024, 10, 1); // 举例:2024年10月1日
// 判断该日期是否是周末或节假日
bool isHoliday = await IsHolidayByDate(testDate);
// 输出结果
if (isHoliday)
{
Console.WriteLine($"{testDate.ToString("yyyy-MM-dd")} 是周末或节假日");
}
else
{
Console.WriteLine($"{testDate.ToString("yyyy-MM-dd")} 不是周末也不是节假日");
}
}
}
代码详细解释:
-
IsHolidayByDate方法:- 这是主方法,接收一个
DateTime类型的日期,首先检查是否是周末(通过IsWeekend方法),如果是,直接返回true。 - 如果不是周末,则调用
IsPublicHoliday方法,检查该日期是否为节假日。
- 这是主方法,接收一个
-
IsWeekend方法:- 用于判断一个日期是否为周末(即星期六或星期天)。通过
DateTime.DayOfWeek属性获取日期的星期几,判断是否为Saturday或Sunday。
- 用于判断一个日期是否为周末(即星期六或星期天)。通过
-
IsPublicHoliday方法:- 通过调用第三方接口(这里是
http://tool.bitefu.net/jiari/)来检查指定的日期是否为节假日。接口返回值:1:表示是周末2:表示是节假日其他:表示不是节假日
- 如果请求成功并且返回值为
1或2,则认为是节假日。
- 通过调用第三方接口(这里是
-
异常处理:
- 在
IsHolidayByDate和IsPublicHoliday方法中都有异常处理逻辑,以确保在网络请求失败或其他异常发生时,程序不会崩溃,而是安全地返回false。
- 在
-
Main方法:- 这是示例的入口方法,用于演示如何调用
IsHolidayByDate方法,判断一个具体的日期(例如 2024 年 10 月 1 日)是否为节假日。
- 这是示例的入口方法,用于演示如何调用
运行效果:
如果你运行这段代码,它会判断给定日期是否为周末或节假日,并在控制台输出相应的结果。例如:
2024-10-01 是周末或节假日
或者,如果该日期是工作日且非节假日,则输出:
2024-10-01 不是周末也不是节假日
7275

被折叠的 条评论
为什么被折叠?



