您的位置:首页 > 编程语言 > C#

C#判断某年某月共有多少个周末,分别是哪几天

2011-06-13 14:19 411 查看
注:本文中的周末指的是周六和周日双休

本代码用的是基姆拉尔森公式来判断某年某月某天是否为周末,关于这个公式,百度百科上有详细介绍,这里再赘述一下:

基姆拉尔森计算公式: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;
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐