功能描述:根据输入的日期判断当天是周几
算法如下:
基姆拉尔森计算公式
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来代入公式计算。
判断日期是该月的第几周:
(DateTime.Now.Day- DateTime.Now.DayOfWeek+6)/7;
判断平年,闰年:
static void Main(string[] args)
{ //如何计算当前日期是本月的第几周?
//得到当前为这个月的第几天
int day = Convert.ToInt32(DateTime.Now.Day);
Console.WriteLine("当前是这个月的第" + day + "天");
//得到是当前年的哪一天
int yearday = Convert.ToInt32(DateTime.Now.DayOfYear);
Console.WriteLine(yearday);
//得到当前年
int year = Convert.ToInt32(DateTime.Now.Year);
Console.WriteLine(year);
//得到月份
int month = Convert.ToInt32(DateTime.Now.Month);
int totalDays = 0;
bool inRn;//是否为闰年
if (year % 4 == 0 && !(year % 100 == 0) || year % 400 == 0)
{
inRn = true;
}
else
{
inRn = false;//平年
}
for (int i = 1900; i < year; i++)
{
/* 判断闰年或平年,并进行天数累加 */
if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0)
{ // 判断是否为闰年
totalDays = totalDays + 366; // 闰年366天
}
else
{
totalDays = totalDays + 365; // 平年365天
}
}
Console.WriteLine(totalDays);
int days = 0;
int beforeDays = 0;
for (int i = 1; i <= month; i++)
{
switch (i)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31;
break;
case 2:
if (inRn)
{
days = 29;
}
else
{
days = 28;
}
break;
default:
days = 30;
break;
}
if (i < month)
{
beforeDays = beforeDays + days;
}
}
Console.WriteLine("此月份之前的天数" + beforeDays);
totalDays = totalDays + beforeDays; // 距离1900年1月1日的天数
int firstDayOfMonth; // 存储当月第一天是星期几:星期日为0
int temp = 1 + totalDays % 7; // 从1900年1月1日推算
if (temp == 7)
{ // 求当月第一天
firstDayOfMonth = 0; // 周日
}
else
{
firstDayOfMonth = temp;
}
Console.WriteLine("该月第一天是星期" + firstDayOfMonth);
}