zoukankan      html  css  js  c++  java
  • 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,余数为六,说明这一天是星期六。这和事实是符合的。
  • 相关阅读:
    C#利用HttpWebRequest进行post请求的示例(HTTPS)
    jQuery对象与DOM对象之间的转换方法
    解决SQL SERVER数据库备份时出现“操作系统错误5(拒绝访问)。BACKUP DATABASE 正在异常终止。”错误的解决办法
    Win10启动盘制作工具
    Silverlight5_Tools安装报错解决方案
    js 数组操作
    mac使用入门
    sql linq lamda
    SqlServer将数据库中的表复制到另一个数据库
    LoadRunner11学习记录五 -- 错误提示分析
  • 原文地址:https://www.cnblogs.com/benpaobadaniu/p/5072964.html
Copyright © 2011-2022 走看看