注:本文中的周末指的是周六和周日双休
本代码用的是基姆拉尔森公式来判断某年某月某天是否为周末,关于这个公式,百度百科上有详细介绍,这里再赘述一下:
基姆拉尔森计算公式:W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7,在公式中d表示日期中的日数,m表示月份数,y表示年数。
注意:在公式中有个与其他公式不同的地方:把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。
关于判断某年某月某天是星期几的方法,详细见http://blog.csdn.net/yice800/archive/2004/08/09/68997.aspx,共有四种。
下面贴代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication19 {
class Program
{
static void Main(string[] args)
{
int Y = 2011; // 记录年份,可以改动,也可以通过控件输入
int M = 6; // 记录月份,可以改动,也可以通过控件输入
List<int> Weekend_list = new List<int>(); // 用来记录月份中双休日的编号(从1开始)
int Month_number = DateTime.DaysInMonth(Y, M); // 用来记录一个月中的天数
for (int i = 1; i <= Month_number;i++ )
{
if (Whether_Weekend(Y, M, i))
{
Weekend_list.Add(i);
}
}
Console.WriteLine("{0}年{1}月共有{2}个双休日,分布如下:/r",Y,M,Weekend_list.Count);
foreach (int item in Weekend_list)
{
Console.WriteLine("{0}号/r", item);
}
Console.ReadLine();
}
public static bool Whether_Weekend(int y ,int m ,int d)
{
if (m == 1 || m == 2)
{
m += 12;
y--;
}
int week = (d + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7; // 基姆拉尔森公式
if (week == 5 || week == 6)
{
return true;
}
else
{
return false;
}
}
}
}