计算任意日期是星期几的方法──蔡勒公式(Zeller's congruence)

我们经常需要计算一个日期是星期几,比较好想的方法是知道一个日期是星期几(比如 1900 年 1 月 1 日是周一),然后一天一天地数……效率有点低,呵呵。改进一点可以一次数一个月或者数一年,不过貌似得用到什么偏移表什么的,不够麻烦的。

来,我们说说蔡勒公式。形式非常诡异和神奇:

[tex]$$dayOfWeek = \left(d + \left\lfloor\frac{26(m+1)}{10}\right\rfloor + y + \left\lfloor\frac{y}{4}\right\rfloor + 6 \left\lfloor\frac{y}{100}\right\rfloor + \left\lfloor\frac{y}{400}\right\rfloor\right) \mod 7$$[/tex]

这里我写的是一种比较适用于计算机计算的公式,其他的形式可以参看维基百科

上式中,y 是年份,m 是月份,d 是日期,dayOfWeek 就是星期几了(以 0 为星期六,1 为星期日,依此类推)。特别注意,如果月份是一月或者二月,要把它们当作上一年的十三月、十四月。

当然,这个公式只适用于格里历,很久以前的事它就管不了了。

Tags:

Related Posts
This entry was posted in Information Technology and tagged . Bookmark the permalink.

5 Responses to 计算任意日期是星期几的方法──蔡勒公式(Zeller's congruence)

  1. vilinov says:

    这公式不诡异啊,很好理解啊

  2. 杜士诚 says:

    嗯...不诡异...麻烦你给我证一下好吧?

  3. 丘丘 says:

    年份除不开怎么办呢

  4. Leaf Duo says:

    @丘丘
    我写高斯函数了啊

  5. ABitNo says:

    很简单的公式,小学时用过。。。

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">