---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
主要记录计算星期几的算法:
公式来自网络:W = [Y-1] + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + D
Y是年份数,D是这一天在这一年中的累积天数,也就是这一天在这一年中是第几天。两个公式中的[...]均指只取计算结果的整数部分。算出来的W除以7,余数是几就是星期几。如果余数是0,则为星期日。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace test10
{
class Program
{
//编写程序,该程序启动后用户可以按“yyyy-MM-dd”的格式输入一个日期,程序计算这一天是星期几,并且计算出是一年中的第几天。
static void Main(string[] args)
{
Console.WriteLine("请按yyyy-MM-dd的格式输入日期:");
string date = Console.ReadLine();
//定义闰年和平年每个月的天数数组
int[] leapYear = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int[] commonYear = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
//判断是否是闰年
if (IsLeapYear(date))
{
//CalDays(date, leapYear);
CalDayOfTheWeek(date, CalDays(date,leapYear));
}
else
{
//CalDays(date, commonYear);
CalDayOfTheWeek(date, CalDays(date, commonYear));
}
Console.ReadKey();
}
//计算该天是星期几
//公式来自网络:W = [Y-1] + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + D Y是年份数,D是这一天在这一年中的累积天数,也就是这一天在这一年中是第几天。两个公式中的[...]均指只取计算结果的整数部分。算出来的W除以7,余数是几就是星期几。如果余数是0,则为星期日。
private static void CalDayOfTheWeek(string date, int sum)
{
//通过字符串截取获得四位年份数,并转换为整数类型
int year = Convert.ToInt32(date.Substring(0, 4));
//计算是星期几
int week = (year - 1) + ((year - 1) / 4) - ((year - 1) / 100) + ((year - 1) / 400) + sum;
int dayOfTheWeek = week % 7;
//通过switch判断把数字转换为字符串输出星期
string weekStr = null;
switch (dayOfTheWeek)
{
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 0:
weekStr = "日";
break;
}
Console.WriteLine("今天是星期",weekStr);
}
//计算日期是一年中的第几天
private static int CalDays(string dateStr, int[] leapYear)
{
//通过字符串得到日期对象,并获得日和月
DateTime date = Convert.ToDateTime(dateStr);
int month = date.Month;
int day = date.Day;
//根据月份累加平闰年每个月天数数组中的数据,最后加上相应的日期得到累计日期
int sum = 0;
for (int i = 0; i < month -1 ; i++)
{
sum += leapYear[i];
}
sum += day;
Console.WriteLine("该日期为今年的第{0}天",sum);
return sum;
}
//判断是否是闰年,年份数能被4整除并且不能被100整除或者年份数能被400整除,为真则是闰年
private static bool IsLeapYear(string date)
{
int year = Convert.ToInt32(date.Substring(0, 4));
return ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0));
}
}
}
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------