C:根据日期判断是一年的第几天、星期几

 W = [Y-1] + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + D

  Y是年份数,D是这一天在这一年中的累积天数,也就是这一天在这一年中是第几天。

  最好用的是蔡勒公式:

  W = [C/4] - 2C + y + [y/4] + [13 * (M+1) / 5] + d - 1

  C是世纪数减一,y是年份后两位,M是月份,d是日数。1月和2月要按上一年的13月和
  14月来算,这时C和y均按上一年取值。

  两个公式中的[...]均指只取计算结果的整数部分。算出来的W除以7,余数是几就
  是星期几。如果余数是0,则为星期日。
  我们知道,公历的平年是365天,闰年是366天。置闰的方法是能被4整除的年份在
  2月加一天,但能被100整除的不闰,能被400整除的又闰。因此,像1600、2000、2400
  年都是闰年,而1700、1800、1900、2100年都是平年。公元前1年,按公历也是闰年。

  因此,对于从公元前1年(或公元0年)12月31日到某一日子的年份Y之间的所有整年
  中的闰年数,就等于

  [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400],

  [...]表示只取整数部分。第一项表示需要加上被4整除的年份数,第二项表示需要去掉
  被100整除的年份数,第三项表示需要再加上被400整除的年份数。之所以Y要减一,这
  样,我们就得到了第一个计算某一天是星期几的公式:

  W = (Y-1)*365 + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + D. (1)

  其中D是这个日子在这一年中的累积天数。算出来的W就是公元前1年(或公元0年)12月
  31日到这一天之间的间隔日数。把W用7除,余数是几,这一天就是星期几。比如我们来
  算2004年5月1日:

  W = (2004-1)*365 + [(2004-1)/4] - [(2004-1)/100] + [(2004-1)/400] +
  (31+29+31+30+1)
  = 731702,

  731702 / 7 = 104528……6,余数为六,说明这一天是星期六。这和事实是符合的。
原文地址:https://www.cnblogs.com/benpaobadaniu/p/5072964.html