心算日期

2015-07-18  本文已影响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,周六。

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

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

上一篇下一篇

猜你喜欢

热点阅读