中国阳历农历的转换
来源:互联网 发布:vscode搭建本地服务器 编辑:程序博客网 时间:2024/04/27 17:08
公司开发新项目,要在先前产品添加些新的功能,其中一项关于日历。有日历那么不可避免地涉及到阳历和农历之间的转换。
这个项目本不是我做的,但出于好奇,在网上搜索了相关资料,才发现中国的文化果然是博大精深,本来理所当然地想在网上找到一个农历阳历转换的公式,搜索之后才发现是我想多了。中国的农历根本就没有一个固定的公式,也可以所没有一个固定的规律,因为他是根据天象来定的。每一个闰年的月份都不一样,天数都不一样。那就奇了怪了,这要如何实现他的功能呢?想了老半天,想不出来,在网上看了相关的帖子,功夫不负有心人,终于让我找到了。原来是用两个数组解决了。到底是怎么解决的呢?下面来分析
//用0-12表示1年中的闰月月份,如果没有闰月,则用0表示//农历一九九零年正月初一对应阳历1900年1月31日const uint8_t CChineseCalendarDB::mc_leapMonth [YEAR_NUM]={ 0x08, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, //1900-1909 0x00, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02, 0x00, 0x07, //1910-1919 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, //1920-1929 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x07, 0x00, //1930-1939 0x00, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, 0x07, //1940-1949 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x08, 0x00, 0x00, //1950-1959 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x07, 0x00, //1960-1969 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x06, //1970-1979 0x00, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x00, 0x06, 0x00, 0x00, //1980-1989 0x05, 0x00, 0x00, 0x03, 0x00, 0x08, 0x00, 0x00, 0x05, 0x00, //1990-1999 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, 0x07, 0x00, 0x00, 0x05, //2000-2009 0x00, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x06, 0x00, 0x00, //2010-2019 0x04, 0x00, 0x00, 0x02, 0x00, 0x06, 0x00, 0x00, 0x05, 0x00, //2020-2029 0x00, 0x03, 0x00, 0x0B, 0x00, 0x00, 0x06, 0x00, 0x00, 0x05, //2030-2039 0x00, 0x00, 0x02, 0x00, 0x07, 0x00, 0x00, 0x05, 0x00, 0x00 //2040-2049};
//1901-2050年的每1个月有多少天,0表示29天,1表示30天const uint16_t CChineseCalendarDB::mc_monthDay[YEAR_NUM]={0x16D2, 0x0752, 0x0EA5, 0x164A, 0x064B, 0x0A9B, 0x1556, 0x056A, 0x0B59, 0x1752, //1900-1909 0x0752, 0x1B25, 0x0B25, 0x0A4B, 0x12AB, 0x0AAD, 0x056A, 0x0B69, 0x0DA9, 0x1D92, //1910-1919 0x0D92, 0x0D25, 0x1A4D, 0x0A56, 0x02B6, 0x15B5, 0x06D4, 0x0EA9, 0x1E92, 0x0E92, //1920-1929 0x0D26, 0x052B, 0x0A57, 0x12B6, 0x0B5A, 0x06D4, 0x0EC9, 0x0749, 0x1693, 0x0A93, //1930-1939 0x052B, 0x0A5B, 0x0AAD, 0x056A, 0x1B55, 0x0BA4, 0x0B49, 0x1A93, 0x0A95, 0x152D, //1940-1949 0x0536, 0x0AAD, 0x15AA, 0x05B2, 0x0DA5, 0x1D4A, 0x0D4A, 0x0A95, 0x0A97, 0x0556, //1950-1959 0x0AB5, 0x0AD5, 0x06D2, 0x0EA5, 0x0EA5, 0x064A, 0x0C97, 0x0A9B, 0x155A, 0x056A, //1960-1969 0x0B69, 0x1752, 0x0B52, 0x0B25, 0x164B, 0x0A4B, 0x14AB, 0x02AD, 0x056D, 0x0B69, //1970-1979 0x0DA9, 0x0D92, 0x1D25, 0x0D25, 0x1A4D, 0x0A56, 0x02B6, 0x05B5, 0x06D5, 0x0EC9, //1980-1989 0x1E92, 0x0E92, 0x0D26, 0x0A56, 0x0A57, 0x14D6, 0x035A, 0x06D5, 0x16C9, 0x0749, //1990-1999 0x0693, 0x152B, 0x052B, 0x0A5B, 0x155A, 0x056A, 0x1B55, 0x0BA4, 0x0B49, 0x1A93, //2000-2009 0x0A95, 0x052D, 0x0AAD, 0x0AAD, 0x15AA, 0x05D2, 0x0DA5, 0x1D4A, 0x0D4A, 0x0C95, //2010-2019 0x152E, 0x0556, 0x0AB5, 0x15B2, 0x06D2, 0x0EA9, 0x0725, 0x064B, 0x0C97, 0x0CAB, //2020-2029 0x055A, 0x0AD6, 0x0B69, 0x1752, 0x0B52, 0x0B25, 0x1A4B, 0x0A4B, 0x04AB, 0x055B, //2030-2039 0x05AD, 0x0B6A, 0x1B52, 0x0D92, 0x1D25, 0x0D25, 0x0A55, 0x14AD, 0x04B6, 0x05B5, //2040-2049};
两个数组包含了1990到2049年150年的农历信息,包括一年是否闰年,闰哪 一个月,每一个月有多少天等等。这就可以不用自己绞尽脑汁去想农历阳历的转换公式了。
小弟是新手,自己写的第一篇文章,水平不高,不要见怪……
- 中国阳历农历的转换
- 阳历农历转换
- java阳历农历互相转换
- 农历 阴历 转换阳历算法
- VB.NET的阳历与农历转换的算法
- VB.NET的阳历与农历转换的算法
- VB.NET的阳历与农历转换的算法
- VB.NET的阳历与农历转换的算法
- VB.NET的阳历与农历转换的算法
- sql中农历阳历之间的转换问题
- 阳历到农历转换的一个PHP类
- 农历与阳历的对照
- 农历转阳历的算法
- 农历与阳历的对照
- 农历与阳历的对照
- 农历与阳历的对照
- 农历与阳历转换java版本
- JAVA版农历和阳历相互转换
- NSIS脚本编译后乱码
- oracle用户管理
- Hdu 1561 The more, The Better
- 放大的X
- 一步一步搭建Grails项目环境
- 中国阳历农历的转换
- 对搜索的文档进行排序
- vim配置
- yii 中的language=> "zh_cn"
- stm32库函数学习篇---NVIC与外部中断
- 四边形不等式DP的总结
- QT网络进程和线程
- SQL Server 死锁故障排除,第三部分
- linux远程登录ssh免密码