公历转农历算法
2015-07-22 18:37
513 查看
void GetLunarDate( LPTSTR &pstrLunarMonth, LPTSTR &pstrLunarDay, unsigned short uYear, unsigned short uMonth, unsigned short uDay ) { const int nMonthAdd[12] = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 }; const int nLunarData[100] = { 2635, 333387, 1701, 1748, 267701, 694, 2391, 133423, 1175, 396438, 3402, 3749, 331177, 1453, 694, 201326, 2350, 465197, 3221, 3402, 400202, 2901, 1386, 267611, 605, 2349, 137515, 2709, 464533, 1738, 2901, 330421, 1242, 2651, 199255, 1323, 529706, 3733, 1706, 398762, 2741, 1206, 267438, 2647, 1318, 204070, 3477, 461653, 1386, 2413, 330077, 1197, 2637, 268877, 3365, 531109, 2900, 2922, 398042, 2395, 1179, 267415, 2635, 661067, 1701, 1748, 398772, 2742, 2391, 330031, 1175, 1611, 200010, 3749, 527717, 1452, 2742, 332397, 2350, 3222, 268949, 3402, 3493, 133973, 1386, 464219, 605, 2349, 334123, 2709, 2890, 267946, 2773, 592565, 1210, 2651, 395863, 1323, 2707, 265877 }; int nTheDate, nIsEnd, m, k, n, i, nBit; nTheDate = (uYear - 1921) * 365 + (uYear - 1921) / 4 + uDay + nMonthAdd[uMonth - 1] - 38; if ((!(uYear % 4)) && (uMonth > 2)) nTheDate = nTheDate + 1; nIsEnd = 0; m = 0; while (nIsEnd != 1) { if (nLunarData[m] < 4095) k = 11; else k = 12; n = k; while (n >= 0) { nBit = nLunarData[m]; for (i = 1; i < n + 1; i++) nBit = nBit / 2; nBit = nBit % 2; if (nTheDate <= (29 + nBit)) { nIsEnd = 1; break; } nTheDate = nTheDate - 29 - nBit; n = n - 1; } if (nIsEnd) break; m = m + 1; } int nCurMonth = k - n + 1; if (k == 12) { if (nCurMonth == nLunarData[m] / 65536 + 1) nCurMonth = 1 - nCurMonth; else if (nCurMonth > nLunarData[m] / 65536 + 1) nCurMonth = nCurMonth - 1; } if (nCurMonth < 1) wcscat_s(pstrLunarMonth, sizeof(TCHAR), _T("闰")); wcscat_s(pstrLunarMonth, sizeof(TCHAR) * wcslen(gszMonth[nCurMonth]), gszMonth[nCurMonth]); wcscat_s(pstrLunarDay, sizeof(TCHAR) * wcslen(gszDay[nTheDate]), gszDay[nTheDate]); }
相关文章推荐
- 今天“农村打工仔”带你们走入Android的世界
- SVN-previous operation has not finished run 'cleanup' if it was interrupted
- 工作经验之OnClick的小细节
- 工作经验之OnClick的小细节
- TextView 使用自定义的字体和亮点
- mysqldump命令详解
- servlet
- Unity3D中的屏幕着色器和图像特效
- Linux读取原Windows磁盘分区
- mysql修改字符编码
- hdu 4738——Caocao's Bridges
- leetcode第231题:Power of Two
- mysql 开启查询日志
- HDU 2571 命运
- 免费:MYCNCART 自适应主题模板 MCCThemes-008
- 免费:MYCNCART 自适应主题模板 MCCThemes-008
- OC内存管理相关整理
- HTML简介
- VBA排序算法
- 解决: ./check_oracle_health --connect orcl --mode connection-time 报错的问题