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来代入公式计算。
下面是 C#的代码实现
/// 计算输入日期的星期 /// </summary> /// <param name="year">年份,yyyy格式 如:2009</param> /// <param name="month">月份:1到12之间的整数</param> /// <param name="day">日期:1到31之间的整数</param> /// <returns>星期数,1至7之间 1代表星期一,7代表星期天</returns> int Week(int year, int month, int day) { if (month == 1 || month == 2) { month += 12; year -= 1; } int week = (day + 2 * month + 3 * (month + 1) / 5 + year + year / 4 - year / 100 + year / 400) % 7; return (week + 1); }