{
Console.Write("请选择年份: ");
int year = int.Parse(Console.ReadLine());
Console.Write("请选择月份: ");
int month = int.Parse(Console.ReadLine());
Console.WriteLine("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
int days = GetDaysOfMonth(year, month);
int firstDayOfMonth = GetWeekOfDate(year, month, 1);
for (int n = 0; n < firstDayOfMonth; n++)
{
Console.Write("\t");
}
for (int i = 1; i <= days; i++)
{
Console.Write(i + "\t");
if (GetWeekOfDate(year, month, i) == 6)
{
Console.WriteLine();
}
}
Console.ReadLine();
}
#region 判断是否为闰年
static bool IsleapYear(int year)
{
if ((year % 4 == 0 && year % 100 != 100) || year % 400 == 0)
{
return true;
}
else
return false;
}
#endregion
#region 一个月有多少天
static int GetDaysOfMonth(int year, int month)
{
int days = 0;
switch (month)//定义月份
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31;
break;
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
case 2:
days = IsleapYear(year) ? 29 : 28;
break;
default:
days = 30;
break;
}
return days;
}
#endregion
#region 一年有多少天
static int GetDaysOfYear(int year)
{
return IsleapYear(year) ? 366 : 365;
}
#endregion
#region 时间的星期
static int GetWeekOfDate(int year, int month, int day)
{
int days = GetDaysOfDate(year, month, day);
return (days + 2) % 7;
}
#endregion
static int GetDaysOfDate(int year, int month, int day)
{
int totalDays = 0;
for (int i = 1980; i < year; i++)
{
totalDays = totalDays + GetDaysOfYear(i);
}
for (int i = 1; i < month; i++)
{
totalDays += GetDaysOfMonth(year, i);
}
totalDays = totalDays + day - 1;
return totalDays;
}
这个是我用控制台写的万年历作者: 江湖一浪人 时间: 2013-6-12 14:59
算法如下:
基姆拉尔森计算公式
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来代入公式计算。
代码如下:
//y-年,m-月,d-日期
string CaculateWeekDay(int y,int m, int d)
{
if(m==1) m=13;
if(m==2) m=14;
int week=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
string weekstr="";
switch(week)
{
case 1: weekstr="星期一"; break;
case 2: weekstr="星期二"; break;
case 3: weekstr="星期三"; break;
case 4: weekstr="星期四"; break;
case 5: weekstr="星期五"; break;
case 6: weekstr="星期六"; break;
case 7: weekstr="星期日"; break;
}
return weekstr;
}