1185. 一周中的第几天
给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。
输入为三个整数:day、month 和 year,分别表示日、月、年。
您返回的结果必须是这几个值中的一个 {“Sunday”, “Monday”, “Tuesday”, “Wednesday”, “Thursday”, “Friday”, “Saturday”}。
提示:
- 给出的日期一定是在
1971
到2100
年之间的有效日期。
先去看看1970年12月31日是星期几
然后拆成三部分计算
目标日期前的所有年份的天数
目标日期当月之前的天数
目标日期当月当日的天数
要记得考虑闰年的影响
public class Solution { public string DayOfTheWeek(int day, int month, int year) { string[] week = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"}; int[] monthDays = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30}; //输入年份之前的年份的天数贡献 int days = 365 * (year - 1971) + (year - 1969) / 4; //输入年份中,输入月份之前的月份的天数贡献 for (int i = 0; i < month - 1; ++i) { days += monthDays[i]; } if ((year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) && month >= 3) { days++; } //输入月份中的天数贡献 days += day; return week[(days + 3) % 7]; } }
当然做法不止一种
有更为直接的公式可以用 ——蔡勒公式
甚至C#还给你内置了函数
public class Solution { public string DayOfTheWeek(int day, int month, int year) { return new DateTime(year, month, day).DayOfWeek.ToString(); } }