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

计算某一天是星期几(C#)

2008-08-30 16:28 176 查看
///已知2000年1月1日是星期六,如何知道某一天是星期几?

///只要知道这一天相距2000年1月1日的天数n,让n除以7得出余数m;

///如果该天在2000年1月1日之前,则把6-m,得到的就是该天的星期数。

///如果该天在2000年1月1日之后,则把n=6+m(如果6+m>7,则n=6+m-7),n就是该天的星期数。

///程序清单如下:

class Calendar ///定义一个日历类
{
private readonly int year;
private readonly byte month;
private readonly byte day;
private readonly byte week;
public Calendar(int cyear, byte cmonth, byte cday) ///Calendar的构造函数。
{ ///初始化年,月,日,并计算该年月日是星期几。
double daysDiff = 0.0, daysOfThisYear = 0.0;
year = cyear;
month = cmonth;
day = cday;
if(cyear<2000) ///如果是2000年以前的年份
while (++cyear < 2000)
{
daysDiff += isLeapYear(cyear) ? 366.0 : 365.0; ///2000年以前到该年之间的每年天数的累加和
}
else ///如果是2000年以后的年份
while (--cyear >= 2000)
{
daysDiff += isLeapYear(cyear) ? 366.0 : 365.0; ///2000年以后到该年之间的每年天数的累加和
}
while (--cmonth >= 1)
{
daysOfThisYear += daysOfTheMonth(cmonth); ///计算该年已经过了多少天
}
daysOfThisYear += cday;
if (year < 2000)
{
daysOfThisYear = (isLeapYear(year) ? 366.0 : 365.0 )- daysOfThisYear;
daysOfThisYear++;
}
else
daysOfThisYear--;
daysDiff += daysOfThisYear;
daysDiff %= 7;
if (year >= 2000)
daysDiff += 6.0;
else
daysDiff = 6.0 - daysDiff;
week = Convert.ToByte(daysDiff % 7.0);
}
private bool isLeapYear(int lyear) ///判断某年是否是闰年
{
if (lyear % 4 == 0)
if (lyear % 100 == 0)
if (lyear % 400 == 0)
return true;
else
return false;
else
return true;
else
return false;
}
private byte daysOfTheMonth(byte dmonth) ///返回一年中指定月份(dmonth)的天数
{
byte[] daysPmonth = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
if (dmonth == 2 && isLeapYear(year))
return (byte)(daysPmonth[dmonth - 1] + 1);
return daysPmonth[dmonth - 1];
}
public string Week ///返回星期的中文
{
get
{
String[] weekstr = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
return weekstr[week];
}
}
}
class Program
{
static void Main(string[] args)
{
Calendar myc=new Calendar(2008,6,4);
Console.WriteLine(myc.Week);
Console.ReadKey();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: