答案 0 :(得分:4)
您实际上并不需要新算法。只要您拥有范围为400年(或更长)的一个算法,就可以在该算法的范围内添加任何日期。这是有效的,因为格里高利历每400年重复一次(XX / YY / ZZZZ与XX / YY /(ZZZZ + 400)相同的工作日)。
因此,如果我们假设您有一些适用于日期1/1/1600到31/12/1999(包括两者)的算法,您可以使用(year mod 400)+1600
作为任何日期的工作日计算这一年。
如果您没有从1/1 / XXXX(XXXX mod 400 = 0
)开始的400年范围,您需要稍微操纵日期以获得正确的结果(而不是将1600添加到年,添加X * 400,其中X是一个整数,使得某些日期将在该范围内,然后对那些超出范围的日期添加或减去400年。
答案 1 :(得分:1)
http://lxr.linux.no/linux/net/netfilter/xt_time.c只是将其计算出来。为了减少循环中的迭代次数,可以使用静态表,就像在那里一样。