C#判断某天是否是周末或者节假日示例

/// <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")} 不是周末也不是节假日");
        }
    }
}

代码详细解释:

  1. IsHolidayByDate 方法:

    • 这是主方法,接收一个 DateTime 类型的日期,首先检查是否是周末(通过 IsWeekend 方法),如果是,直接返回 true
    • 如果不是周末,则调用 IsPublicHoliday 方法,检查该日期是否为节假日。
  2. IsWeekend 方法:

    • 用于判断一个日期是否为周末(即星期六或星期天)。通过 DateTime.DayOfWeek 属性获取日期的星期几,判断是否为 SaturdaySunday
  3. IsPublicHoliday 方法:

    • 通过调用第三方接口(这里是 http://tool.bitefu.net/jiari/)来检查指定的日期是否为节假日。接口返回值:
      • 1:表示是周末
      • 2:表示是节假日
      • 其他:表示不是节假日
    • 如果请求成功并且返回值为 12,则认为是节假日。
  4. 异常处理

    • IsHolidayByDateIsPublicHoliday 方法中都有异常处理逻辑,以确保在网络请求失败或其他异常发生时,程序不会崩溃,而是安全地返回 false
  5. Main 方法

    • 这是示例的入口方法,用于演示如何调用 IsHolidayByDate 方法,判断一个具体的日期(例如 2024 年 10 月 1 日)是否为节假日。

运行效果:

如果你运行这段代码,它会判断给定日期是否为周末或节假日,并在控制台输出相应的结果。例如:

2024-10-01 是周末或节假日

或者,如果该日期是工作日且非节假日,则输出:

2024-10-01 不是周末也不是节假日
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值