阳历和阴历转换算法

下面描述的是阳历换算阴历的算法原理。
阳历,有很强的规律性。每年12个月,1、3、5、7、8、10、12月都为31天;2月份平年28天,能被4除尽的年份里为29天,但1900年为28天;其余月份为31天。
阴历,却没有这些规律可循。阴历分大小月,大月30天,小月29天,但一年中哪个月为大月,哪个月为小月,却是不定的。阴历每十年有4个润年,但哪一年为润年也是不定的。而润月中,哪个润月为大月,哪个为小月也是不定的。因此,推算阴历就没有一个统一的算法。
阴历是要靠天文观测的,因此上面这些不确定的数据,是可以从天文台得到的。
下面是经过整理的150年内的阴历数据:

阴历数据

要推算阴历,就要根据这些数据来推。
上面共15行,每行10个数据。每个数据代表一年,从阳历1900.1.31日起,为第一个数据年的开始,即阳历1900.1.31=阴历0.1.1。150个数据可推150年的阴历,因此目前最大只能推算到2049年,以后的推导,还需要从天文台得到新的数据后才能推导,否则将出现误差。
要推算阴历,关键是理解这些数据的意义。
拿第一个数据来说,代表阳历1900.1.31为始的阴历0年,0x04bd8是5个16进制数,共20bit。
前4位,即0在这一年是润年时才有意义,它代表这年润月的大小月,为1则润大月,为0则润小月。
中间12位,即4bd,每位代表一个月,为1则为大月,为0则为小月。
最后4位,即8,代表这一年的润月月份,为0则不润。首4位要与末4位搭配使用。

由此可以看出,阴历的规律性是很差的。要推算阴历,必需基于查表的算法,具体的数据结构安排,可以根据不同的语言作灵活的安排。
java版代码可以参见:http://www.cnblogs.com/qintangtao/archive/2013/03/01/2938887.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 如果不注意,大概很多人认为“闰月”与“闰年”是一个意思,其实不是,虽说只是一字之差,所包含的意思却相差很远。 “闰...
    雨落未惊风阅读 13,371评论 1 2
  • 一年前因一件对我人生有重要影响的事去苏州,到达苏州的时候是下午五点,办好事六点多,已经华灯初上。 打开地图,看离寒...
    吃我一针阅读 3,030评论 0 1
  • 借助互联网,我们本该更高效、便捷地处理事务,学习更多知识和技能,实现更多的理想。很多网址导航站,天天都是一个样,用...
    成长智库阅读 4,093评论 0 1
  • 偶然听到陈粒的歌声 就中了她的毒。 一个人困在家中的时间就单曲循环的听着 没有欢颜笑语 任由自己放空思绪。 无...
    _lonely_阅读 4,007评论 0 0
  • 其实我一直想要给你们安利一些好玩又好用的APP,因为有了好的APP,可以让你事半功倍。好了废话不多说,我们直接进入...
    不列颠的猫阅读 3,655评论 0 3

友情链接更多精彩内容