快速业务通道

java实现阴阳历算法 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20
0, 1 }, { 22, 4, 6, 56, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0 }, /* 2012 */ { 40, 0, 1, 2, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0 }, { 30, 9, 2, 7, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1 }, { 49, 0, 3, 12, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1 }, { 38, 0, 4, 17, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0 }, /* 2016 */ { 27, 6, 6, 23, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1 }, { 46, 0, 0, 28, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0 }, { 35, 0, 1, 33, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0 }, { 24, 4, 2, 38, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1 }, /* 2020 */ { 42, 0, 4, 44, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 }, { 31, 0, 5, 49, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0 }, { 21, 2, 6, 54, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1 }, { 40, 0, 0, 59, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1 }, /* 2024 */ { 28, 6, 2, 5, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0 }, { 47, 0, 3, 10, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1 }, { 36, 0, 4, 15, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1 }, { 25, 5, 5, 20, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0 }, /* 2028 */ { 43, 0, 0, 26, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1 }, { 32, 0, 1, 31, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0 }, { 22, 3, 2, 36, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0 } }; #define lastyear (firstyear+sizeof(lunarcal)/sizeof(struct taglunarcal)-1) /* 西历年每月之日数 */ int solarcal[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; /* 西历年每月之累积日数, 平年与闰年 */ int solardays[2][14] = { { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365, 396 }, { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366, 397 } }; /* 求此西历年是否为闰年, 返回 0 为平年, 1 为闰年 */ int getleap( int year ) { if ( year % 400 == 0 ) return 1; else if ( year % 100 == 0 ) return 0; else if ( year % 4 == 0 ) return 1; else return 0; } /* 西历农历转换 */ int calconv( struct convdate *cd ) { int leap, d, sm, y, im, l1, l2, acc, i, lm, kc; if ( cd->source == 0 ) /* solar */ { if ( cd->solaryear <= firstyear || cd->solaryear > lastyear ) return 1; sm = cd->solarmonth - 1; if ( sm < 0 || sm > 11 ) return 2; leap = getleap( cd->solaryear ); if ( sm == 1 ) d = leap + 28; else d = solarcal[sm]; if ( cd->solardate < 1 || cd->solardate > d ) return 3; y = cd->solaryear - firstyear; acc = solardays[leap][sm] + cd->solardate; cd->weekday = ( acc + lunarcal[y].baseweekday ) % 7; kc = acc + lunarcal[y].basekanchih; cd->kan = kc % 10; cd->chih = kc % 12; if ( acc <= lunarcal[y].basedays ) { y--; cd->lunaryear = cd->solaryear - 1; leap = getleap( cd->lunaryear ); sm += 12; acc = solardays[leap][sm] + cd->solardate; } else cd->lunaryear = cd->solaryear; l1 = lunarcal[y].basedays; for ( i=0; i<13; i++ ) { l2 = l1 + lunarcal[y].monthdays[i] + 29; if ( acc <= l2 ) break; l1 = l2; } cd->lunarmonth = i + 1; cd->lunardate = acc - l1; im = lunarcal[y].intercalation; if ( im != 0 && cd->lunarmonth > im ) { cd->lunarmonth--; if ( cd->lunarmonth == im ) cd

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号