美文网首页
心算日期

心算日期

作者: 囧思志 | 来源:发表于2015-07-18 23:04 被阅读0次

    无意间看到这篇文章,算法系列之十七:日历生成算法-中国公历(格里历)(下)

    受到一些启发,发现其实稍微掌握一些小技巧,就能很简单地将日期和周几建立起联系。

    蔡勒(Zeller)公式:

    week = ( year + year / 4 + century / 4 - 2 * century + 13 * (month + 1) / 5 + day - 1 ) % 7

    year: 取年份的后两位。如2015年取15;1990年取90。

    century: 世纪数减1,即年份的前两位。如2015年取20;1990年取19。

    month: 月份

    day: 日

    注: 在计算公式中的除法均为整除。

    例: 2015年5月19日即 year=15, century=20, month=5, day=19

    例外情况: 1月和2月在计算时需要看做上一年的13月和14月。

    故,2015年1月1日的运算变量为 year=14,century=20, month=13, day=1

    这个公式虽然看起来有些复杂,不过可以做一些简化:

    1. 可以将century和year这两个变量揉成一个常量,然后这几年的计算只要记得几个常量就可以了。

    2. 乘以13除以5的这部分可以转换为乘以26,然后做一个10的整除,其实就是舍去个位。

    于是,我们将公式转换成:

    2014年计算公式

    week = (26 * (month + 1) /10 + day - 19) % 7

    2015年计算公式

    week = (26 * (month + 1) /10 + day - 18) % 7

    2016年计算公式

    week = (26 * (month + 1) /10 + day - 16) % 7

    随手算一个今天的便是 ((26 * 8)/10 + 18 - 18) % 7 = 6,周六。

    同时,如果你知道今天是周几,但是忘了今天是几号,也可以用这个公式来算出这个月周几的是哪几天,然后回忆一下便可以知道今天是几号。

    当然,这些来回折腾地算都不如直接看一下日历来得简单。不过多一种方法,让日历了然于心,少一些干扰,或许也是一件好事。

    相关文章

      网友评论

          本文标题:心算日期

          本文链接:https://www.haomeiwen.com/subject/zbdpqttx.html