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,余数为六,说明这一天是星期六。这和事实是符合的。
  • 相关阅读:
    第九次训练赛
    什么是 Catalan 数列以及其应用
    Python pip 安装与使用
    HDU 1179:Ollivanders: Makers of Fine Wands since 382 BC.
    身份证信息
    流量暴增,掌门教育如何基于 Spring Cloud Alibaba 构建微服务体系?
    从零入门 Serverless | 函数计算的可观测性
    如何管理越来越多的 operator?OLM 给你答案
    Fluid: 让大数据和 AI 拥抱云原生的一块重要拼图
    SpringCloud 应用在 Kubernetes 上的最佳实践 — 线上发布(可监控)
  • 原文地址:https://www.cnblogs.com/benpaobadaniu/p/5072964.html
Copyright © 2011-2022 走看看