You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C# WinForm中用DateTime计算一年的周六周日天数(无循环)

在C# Windows Form中无循环遍历全年日期计算周六周日数量

实现思路

  • 平年共365天、闰年共366天,全年必然包含52个完整星期,因此周六、周日的基础数量各为52天
  • 计算当年剩余的1天(平年)或2天(闰年),判断这些额外天数是否为周六/周日,将符合条件的数量加到基础值上
  • 借助DateTime.IsLeapYear判断闰年,DateTime.DayOfWeek获取年初星期几,仅需检查最多2天即可完成计算,无需遍历全年

改进后的代码

private void button1_Click(object sender, EventArgs e)
{
    if (!int.TryParse(textBox1.Text, out int inputYear))
    {
        MessageBox.Show("请输入有效的年份!");
        return;
    }

    DateTime startOfYear = new DateTime(inputYear, 1, 1);
    int totalDays = DateTime.IsLeapYear(inputYear) ? 366 : 365;
    int extraDays = totalDays % 7; // 平年返回1,闰年返回2

    int baseCount = 52;
    int satCount = baseCount;
    int sunCount = baseCount;

    // 仅检查额外的1-2天,而非遍历全年
    for (int i = 0; i < extraDays; i++)
    {
        DayOfWeek currentDay = startOfYear.AddDays(i).DayOfWeek;
        if (currentDay == DayOfWeek.Saturday)
        {
            satCount++;
        }
        else if (currentDay == DayOfWeek.Sunday)
        {
            sunCount++;
        }
    }

    MessageBox.Show($"周六:{satCount}天,周日:{sunCount}天");
}

代码说明

  • 加入int.TryParse做输入验证,避免非法输入导致程序报错
  • 通过DateTime.IsLeapYear快速确定全年天数,计算出仅需检查的额外天数(最多2天)
  • 仅循环1-2次即可完成额外天数的判断,相比原代码遍历365/366天,效率大幅提升
  • 基础计数52来自于52*7=364,这是全年完整覆盖的星期数,剩余天数只需单独判断

内容的提问来源于stack exchange,提问作者richiee_chen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 09:50:45