我这个方法有点小取巧,只取1900-01-01年后的数据,之前的的日期需要重新计算一下。
1、先取出输入的日期距离1900-01-01的天数
private static int GetDays(int year, int month, int day) { //1900-1-1是星期一 int result = 0; int[] month31 = {1,3,5,7,8,10,12}; int[] month30 = {4,6,9,11}; const int YEAR = 1900; const int MONTH = 1; const int DAY = 1; //先按整年计算***************************************** result += (year - YEAR) * 365; for (int i = YEAR; i < year; i++) { if (IsLeapYear(i)) { ++result; } } //计算月份******************************************** if (month > MONTH) { for (int i = MONTH; i < month; i++) { if (i == 2 && IsLeapYear(year)) { result += 29; } else { result += 28; } if (month30.Contains(i)) { result += 30; } if (month31.Contains(i)) { result += 31; } } } else { //月份相等的情况,不可能有月份小于1,不需要做任何运算,在下面的日计算直接计算即可 } //计算日********************************* result += day - DAY; return result; }
2、将天数差对7取余,比如相差1900-01-07和1900-01-01相差7天,那么取余得到0,说明是星期天,
如果是1900-01-08,则取余为1,说明和1900-01-01是同一个星期,即星期一
/// <summary> /// 根据天数差获取是星期几 /// </summary> /// <param name="days">天数差</param> /// <param name="weekInt">取余后的数</param> /// <returns></returns> private static string GetWeekDay(int days,out int weekInt) { Dictionary<int, string> weekDic = new Dictionary<int, string>(); weekDic.Add(1, "星期一"); weekDic.Add(2, "星期二"); weekDic.Add(3, "星期三"); weekDic.Add(4, "星期四"); weekDic.Add(5, "星期五"); weekDic.Add(6, "星期六"); weekDic.Add(7, "星期天"); weekInt = days % 7 == 0 ? 7 : days % 7; return weekDic[weekInt]; }
3、输出结果
Console.WriteLine("请输入一个日期:"); string dateStr = Console.ReadLine(); string[] dateArray = dateStr.Split(‘-‘); int year = int.Parse(dateArray[0]); int month = int.Parse(dateArray[1]); int day = int.Parse(dateArray[2]); int days = GetDays(year, month, day); int weekInt = 0; Console.WriteLine("距离1900-1-1,有" + days + "天的时间"); Console.WriteLine("这一天是" + GetWeekDay(days, out weekInt));
可以用在js计算星期上。
时间: 2024-10-05 08:01:07