当初自己写的这个 没用系统函数
- 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));
- }
- }
- }
复制代码 |