阴历阳历转换0214阳历几号

博客访问: 349629
博文数量: 98
博客积分: 4980
博客等级: 上校
技术积分: 899
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: C/C++
//引用部分
/*pStr[0] 返回年的天干地支及属相pStr[1] 返回月份及是否闰月pStr[2] 返回日期pStr[3] 返回月份的天干地支pStr[4] 返回日期的天干地支pStr[5] 返回节气pStr[6] 返回公历的节假日pStr[7] 返回第几个星期几样的节假日pStr[8] 返回农历的节假日//pTxt, 用来放置返回数据字符串wFlag, 用位来表示相应字符串是否需要显示,
&&& 如果某一字符串不使用,可将相应位置置0即可*/
int GetLunarDay(SDateTime *pTime, char pStr[][128], WORD wFlag);
//农历部分//使用比特位记录每年的情况
//0~4 共5bit 春节日份
//5~6 共2bit 春节月份
//7~19 共13bit 13个月的大小月情况(如果无闰月,最后位无效),大月为1,小月为0
//20~23 共4bit 记录闰月的月份,如果没有闰月为0unsigned int LunarCalendarTable[199] = {&&& 0x04AE53,0x0A6BD,0x0DDAAB9,0x056A4D,0x09AD42,0x24AEB6,0x04AE4A,/**/&&& 0x6A4DBE,0x0A4D52,0x0DD52BA,0x0B544E,0x0D6A43,0x296D37,0x095B4B,0x749BC1,0x049754,/**/&&& 0x0A4B48,0x5B25BC,0x06A550,0x06D445,0x4ADAB8,0x02B64D,0xxx0B3E,/**/&&& 0x0D4A51,0x0EA546,0x56D4BA,0x05AD4E,0x02B644,0xx092E4B,0x7C96BF,0x0CD4A48,/**/&&& &&& 0x6DA53B,0x0B554F,0x056A45,0x4AADB9,0x025D4D,0x092D42,0x2C95B6,0x0A954A,0x7B4ABD,0x06CA51,/**/ &&& 0x0BABB,0x04DA4E,0x0A5B43,0x352BB8,0x052B4C,0x8A953F,0x0EAA48,0x7AD53C,/**/ &&& 0x0AB54F,0x04B645,0x4AA574D,0xx3EDAABE,0x056A51,0x096D46,/**/ &&& 0x54AEBB,0x04AD4F,0x0A4D43,0x4D26B7,0x0D254B,0x8D52BF,0x0BB6A47,0x696D3C,0x095B50,/**/&&& 0x049B45,0x4A4BB9,0x0A4B4D,0xAB25C2,0x06A554,0x06D449,0x6ADA3D,0x0AB651,0xx5497BB,/**/&&& 0x0B44,0x36A537,0x0EA54A,0x86B2BF,0x05AC53,0x0AB647,0x5936BC,0x092E50,0x0C9645,/**/&&& 0x4D4AB8,0x0D4A4C,0x0DA541,0x25AAB6,0x056A49,0x7AADBD,0x025D52,0x092D47,0x5C95BA,0x0A954E,/**/&&& 0x0B4A43,0x4BAD54A,0x955ABF,0x04BA53,0x0A5B48,0x652BBC,0x052B50,0x0AAB9,/**/&&& 0x06AA4C,0x0AD541,0x24DAB6,0x04B64A,0x6A4E51,0x0DE933A,0x0D534D,0x05AA43,/**/&&& 0x36B537,0x096D4B,0xB4AEBF,0x04AD53,0x0A4D48,0x6D25BC,0x0D254F,0x0DDAA38,0x0B5A4C,/**/&&& 0x056D41,0x24ADB6,0x049B4A,0x7A4BBE,0x0A4B51,0x0AA546,0x5B52BA,0x06D24E,0x0ADA42,0x355B37,/**/&&& 0x07C1,0xx064B48,0x66A53C,0x0EA54F,0x06B244,0x4AB638,0x0AAE4C,0x092E42,/**/&&& 0x3CCD4ABD,0x0D4A51,0x0DA545,0x55AABA,0x056A4E,0x0A6D43,0x452EB7,0x052D4B,/**/&&& 0x8A95BF,0x0AB4A47,0x6B553B,0x0AD54F,0x055A45,0x4A5D38,0x0A5B4C,0x052B42,0x3A93B6,/**/&&& 0xx7729BD,0x06AA51,0x0AD546,0x54DABA,0x04B64E,0x0A738,0x0D264A,0x8E933E,/**/&&& 0x0DDAA47,0x66B53B,0x056D4F,0x04AE45,0x4A4EB9,0x0A4D4C,0x0DD92B5&&&&&&&&& /**/};
typedef struct {&WORD wD&BOOL bH&char strHoliday[128];}HolidayS
//公历节日 *表示放假日HolidayStruct GregorianHoliday[] = {&{0x0101,1, "新年元旦",&&&&&&&},&{0x0106,0, "中国13亿人口日[2005]",&&&&},&{0x0108,0, "周恩来逝世纪念日[1976]",&&&&},&{0x0121,0, "列宁逝世纪念日[1924]",&&&&},&&{0x0127,0, "宋庆龄诞辰纪念日[1893]",&&&&},&&&&&&&&&&&&&&&&&&&//----&& &{0x0202,0, "世界湿地日[1996]",&&&&&},&{0x0207,0, "国际声援南非日[1964]",&&&&},&{0x0210,0, "世界气象日[1960]",&&&&&},&{0x0214,0, "西方情人节",&&&&&&&},&{0x0215,0, "中国12亿人口日[1995]",&&&&},&{0x0219,0, "邓小平逝世纪念日[1997]",&&&&},&{0x0221,0, "反对殖民制度斗争日[1949]",&&&},&{0x0224,0, "第三世界青年日",&&&&&&},&{0x0228,0, "世界居住条件调查日",&&&&&},&//----&& &{0x0301,0, "国际海豹日[1983]",},&{0x0303,0, "全国爱耳日[2000]",},&{0x0305,0, "中国青年志愿者服务日[2000] 毛泽东题词“向雷锋同志学习”[1963] 周恩来诞辰纪念日[1898] 斯大林逝世纪念日[1953]",},&{0x0308,0, "国际妇女节[1910]",},&{0x0312,0, "中国植树节[1979] 孙中山逝世纪念日",&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& },&{0x0314,0, "国际警察日(节) 马克思逝世纪念日[1883]",&&&&&&&&&&&& },&{0x0315,0, "国际消费者权益日[1983]",&&&&&&&&&&&&&&&& },&{0x0316,0, "手拉手情系贫困小伙伴全国统一行动日",&&&&&&&&&&&&& },&{0x0317,0, "中国国医节[1929] 国际航海日",&&&&&&&&&&&&&& },&{0x0318,0, "全国科技人才活动日 巴黎公社纪念日[1871]",&&&&&&&&&&& },&{0x0321,0, "世界睡眠日[2001] 世界儿歌日 世界森林日(林业节)[1972] 消除种族歧视国际日[1976]", },&{0x0322,0, "世界水日[1993] 中国水周(3月22日至3月28日)[1988设/1994改]",&&&&&&& },&{0x0323,0, "世界气象日[1950]",&&&&&&&&&&&&&&&&& },&{0x0324,0, "世界防治结核病日[1996]",&&&&&&&&&&&&&&&& },&{0x0330,0, "巴勒斯坦国土日",&&&&&&&&&&&&&&&&&& },&//----&& &{0x0401,0, "国际愚人节 全国爱国卫生运动月(四月) 税收宣传月(四月)",&&&&&&&&&&&&&&&&&&&&&&&&& },&{0x0402,0, "国际儿童图书日",&&&&&&&&&&&&&&&&&& },&{0x0407,0, "世界卫生日[年卢旺达境内灭绝种族罪行国际反思日[2004]",&&&&&& },&{0x0421,0, "全国企业家活动日[1994]",&&&&&&&&&&&&&&&& },&{0x0422,0, "世界地球日[1970] 列宁诞辰纪念日[1870]",&&&&&&&&&&&& },&{0x0423,0, "世界图书和版权日",&&&&&&&&&&&&&&&&& },&{0x0424,0, "世界青年反对殖民主义日[1957] 亚非新闻工作者日",&&&&&&&&&& },&{0x0425,0, "全国预防接种宣传日[1986]",&&&&&&&&&&&&&&& },&{0x0426,0, "世界知识产权日[2001]",&&&&&&&&&&&&&&&& },&{0x0427,0, "联谊城日",&&&&&&&&&&&&&&&&&&& },&{0x0430,0, "全国交通安全反思日",&&&&&&&&&&&&&&&&& },&//----&& &{0x0501,0, "国际劳动节[1889] 国际示威游行日",&&&&&&&&&&&&&&&&&&&&&&&&& },&{0x0503,0, "世界哮喘日",&&&&&&&&&&&&& },&{0x0504,0, "中国五四青年节[1939] 五四运动纪念日[1919] 科技传播日",&& },&{0x0505,0, "全国碘缺乏病防治日[1994] 马克思诞辰纪念日[1818]",&&& },&{0x0508,0, "世界红十字日[1948] 世界微笑日",&&&&&&&& },&{0x0512,0, "国际护士节[1912]",&&&&&&&&&&& },&{0x0515,0, "国际家庭(咨询)日[1994]",&&&&&&&&&& },&{0x0517,0, "世界电信日[1969]",&&&&&&&&&&& },&{0x0518,0, "国际博物馆日",&&&&&&&&&&&& },&{0x0520,0, "全国母乳喂养宣传日[1990] 全国学生营养日[1990]",&&&& },&{0x0522,0, "国际生物多样性日[1994设/2001改]",&&&&&&& },&{0x0526,0, "世界向人体条件挑战日[1993]",&&&&&&&&& },&{0x0529,0, "宋庆龄逝世纪念日[1981]",&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& },&{0x0530,0, "“五卅”反对帝国主义运动纪念日[1925]",&&&&& &&&& },&{0x0531,0, "世界无烟日[1988]", &&&&&&&&&& },&//----&& &{0x0601,0, "国际儿童节[1949]",&&&&&&&&&& },&{0x0605,0, "世界环境日[1974]",&&&&&&&&&& },&{0x0606,0, "全国爱眼日[1996]",&&&&&&&&&& },&{0x0611,0, "中国人口日",&&&&&&&&&&&& },&{0x0617,0, "世界防止荒漠化和干旱日[1995]",&&&&&&& },&{0x0620,0, "世界难民日[2001]",&&&&&&&&&& },&{0x0622,0, "中国儿童慈善活动日",&&&&&&&&&& },&{0x0623,0, "国际奥林匹克日[1894] 世界手球日",&&&&&& },&{0x0625,0, "全国土地日[1991]",},&{0x0626,0, "国际禁毒日(国际反毒品日)[1987] 国际宪章日(联合国宪章日)",&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& },&{0x0630,0, "世界青年联欢节",&&&&&&&&&&&&&&&&&&&& },&//----&& &{0x0701,0, "中国共产党建党纪念日[1921] 香港回归纪念日[1997] 国际建筑日[1985] 亚洲“三十亿人口日”[1988]", },&{0x0702,0, "国际体育记者日 精品推介站()正式开放纪念日[2001]",&&&&&&&&& },&{0x0706,0, "朱德逝世纪念日[1976]",&&&&&&&&&&&&&&&&&& },&{0x0707,0, "中国人民抗日战争纪念日[1937]",&&&&&&&&&&&&&&&& },&{0x0711,0, "中国航海日[2005] 世界(50亿)人口日[1987]",&&&&&&&&&&&&& },&{0x0720,0, "人类首次成功登月[1969]",&&&&&&&&&&&&&&&&&& },&{0x0726,0, "世界语(言)创立日",&&&&&&&&&&&&&&&&&&& },&{0x0728,0, "第一次世界大战爆发[1914]",&&&&&&&&&&&&&&&&& },&{0x0730,0, "非洲妇女日",&&&&&&&&&&&&&&&&&&&&& },&//----&& &{0x0801,0, "中国人民解放军建军节[1927]",&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& },&{0x0805,0, "恩格斯逝世纪念日[1895]",&&&&&&&&&&&& },&{0x0806,0, "国际电影节[1932]",&&&&&&&&&&&&& },&{0x0808,0, "中国男子节(爸爸节)[1988]",&&&&&&&&&&& },&{0x0809,0, "世界土著人民国际日[1994]",&&&&&&&&&&& },&{0x0812,0, "国际青年人日[1999]",&&&&&&&&&&&&& },&{0x0813,0, "国际左撇子日[1975设/1976]",&&&&&&&&&&& },&{0x0815,0, "日本正式宣布无条件投降日[1945] 世界反法西斯战争胜利纪念日[1945]",& },&{0x0826,0, "全国律师咨询日[1993]",&&&&&&&&&&&& },&//----&& &{0x0903,0, "中国抗日战争胜利纪念日[1945]",&&&&&&&&&& },&{0x0908,0, "世界扫盲日[1966] 国际新闻工作者(团结)日[1958]",&&&&&& },&{0x0909,0, "毛泽东逝世纪念日[1976]",&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& },&{0x0910,0, "中国教师节[1985]",&&&&&&&&&&& },&{0x0914,0, "世界清洁地球日",&&&&&&&&&&&& },&{0x0916,0, "国际臭氧层保护日[1987]",&&&&&&&&&& },&{0x0918,0, "“九·一八”事变纪念日(中国国耻日)[1931]",&&&&& },&{0x0920,0, "全国公民道德宣传日[2003] 全国爱牙日[1989]",&&&&& },&{0x0921,0, "国际和平日(全球停火和非暴力日,2002年以后)[2002]",&&& },&{0x0925,0, "鲁迅诞辰纪念日[1881]",&&&&&&&&&& },&{0x0926,0, "(曲阜国际)孔子文化节[1989]",&&&&&&&&& },&{0x0927,0, "世界旅游日[1979]",&&&&&&&&&&& },&//----&& &{0x1001,1, "国庆节[1949] 国际音乐日[1980] 国际敬老日(老人节)[1991]",},&{0x1002,0, "国际和平(与民主自由)斗争日[1949]",&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& },&{0x1004,0, "世界动物日[1949]",&&&&&&&&&&&&&&&&&&&},&{0x1008,0, "全国高血压日[1998] 狮子会世界视觉日[1998]",&&&&&&&&&&&&&},&{0x1009,0, "世界邮政日(万国邮联日)[1969]",&&&&&&&&&&&&&&&&},&{0x1010,0, "辛亥革命纪念日[1911] 世界精神卫生日[1992] 世界居室卫生日",&&&&&&&&&},&{0x1011,0, "声援南非政治犯日",&&&&&&&&&&&&&&&&&&&},&{0x1012,0, "世界(60亿)人口日[1999]",&&&&&&&&&&&&&&&&&&},&{0x1013,0, "中国少年先锋队建队纪念日[1949] 世界保健日 国际教师节 采用格林威治时间为国际标准时间日[1884]",},&{0x1014,0, "世界标准日[1969]",&&&&&&&&&&&&&&&&&&&},&{0x1015,0, "国际盲人节(白手杖节)[1984]",&&&&&&&&&&&&&&&&&},&{0x1016,0, "世界粮食日[1979]",&&&&&&&&&&&&&&&&&&&},&{0x1017,0, "消除贫穷国际日[1992]",&&&&&&&&&&&&&&&&&&},&{0x1019,0, "鲁迅逝世纪念日[1936]",&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& },&{0x1022,0, "世界传统医药日[1992]",&&&&&&&&&& },&{0x1024,0, "联合国日[1945] 世界发展信息日",&&&&&&&& },&{0x1028,0, "世界“男性健康日”[2000]",&&&&&&&&&& },&{0x1031,0, "世界勤俭日",&&&&&&&&&&&&& },&//----&& &{0x1107,0, "十月社会主义革命纪念日(现俄“和谐和解日”)[1917]",&&& },&{0x1108,0, "中国记者日[2000]",&&&&&&&&&&& },&{0x1109,0, "中国消防宣传日(消防节, 全国消防安全宣传教育日)[1992]",& },&{0x1110,0, "世界青年节(日)[1946]",&&&&&&&&&& },&{0x1111,0, "国际科学与和平周(本日所属的一周)",&&&&&&& },&{0x1112,0, "孙中山诞辰纪念日[定] 刘少奇逝世纪念日[1969]", },&{0x1114,0, "世界糖尿病日[1991]",&&&&&&&&&&&&&&&&&&&& },&{0x1117,0, "国际大学生节(世界学生节)[1946]",&&&},&{0x1120,0, "世界儿童日[1986]",&&&&&&},&{0x1121,0, "世界问候日[1973] 世界电视日[1996]",&&},&{0x1124,0, "刘少奇诞辰纪念日[1893]",&&&&&},&{0x1128,0, "恩格斯诞辰纪念日[1820]",&&&&&},&{0x1129,0, "国际声援巴勒斯坦人民国际日[1977]",&&},&//----&& &{0x1201,0, "世界艾滋病日[1988] 朱德诞辰纪念日[1886]",},&{0x1202,0, "废除一切形式奴役世界日[1986]",&&&},&{0x1203,0, "世界残疾人日[1992]",&&&&&&},&{0x1204,0, "中国法制宣传日[2001]",&&&&&},&{0x1205,0, "国际经济和社会发展志愿人员日[1985] 世界弱能人士日", },&{0x1207,0, "国际民航日[纪念定]",&&&&&&& },&{0x1209,0, "“一二·九”运动纪念日[1935] 世界足球日[1995]",&&& },&{0x1210,0, "世界人权日(诺贝尔日)[1950]",&&&&&&&& },&{0x1211,0, "世界防治哮喘日[1998]",&&&&&&&&& },&{0x1212,0, "西安事变纪念日[1936]",&&&&&&&&& },&{0x1213,0, "南京大屠杀纪念日·勿忘国耻,紧记血泪史![1937]",&&& },&{0x1215,0, "世界强化免疫日",&&&&&&&&&&& },&{0x1220,0, "澳门回归纪念日[1999]",&&&&&&&&& },&{0x1221,0, "国际篮球日 斯大林诞辰纪念日[1879]",&&&&&& },&{0x1224,0, "平安夜",&&&&&&&&&&&&& },&{0x1225,0, "圣诞节",&&&&&&&&&&&&& },&{0x1226,0, "毛泽东诞辰纪念日[1893]"},&{0x0000,0, "结束"},&&};
//某月的第几个星期几。 5,6,7,8 表示到数第 1,2,3,4 个星期几&&&&&&&&& },HolidayStruct WeekHoliday[] = {&{0x0110,0, "黑人日",&&&&&&&&&&&&&&&&&&& },&{0x0150,0, "国际麻风节(世界防治麻风病日)[1954]", },//一月的最后一个星期日(月倒数第一个星期日)& },&{0x0351,0, "全国中小学生安全教育日[1996]",&&&&&&&&&&&&& },&{0x0430,0, "世界儿童日[1986]",&&&&&&&&&&&&&&&& },&{0x0453,0, "秘书节",&&&&&&&&&&&&&&&&&&& },&{0x0520,0, "国际母亲节[1914] 救助贫困母亲日[1997]",&&&&&&&&&&& },&{0x0530,0, "全国助残日[1990]",&&&&&&&&&&&&&&&& },&{0x0532,0, "国际牛奶日[1961]",&&&&&&&&&&&&&&&& },&{0x0630,0, "父亲节",&&&&&&&&&&&&&&&&&&&&&&&&&&& },&{0x0716,0, "国际合作节",&&&&&&& },&{0x0911,0, "美国劳动节[1894]",&&&&& },&{0x0932,0, "国际和平日(年)[1981]",&& },&{0x0936,0, "全民国防教育日[2001]",&&&& },&{0x0940,0, "国际聋人节[1958]",&&&&& },&{0x0950,0, "世界海事日[1978] 世界心脏日[2000]", },&{0x1011,0, "世界人居日(国际住房日)[1985]",&& },&{0x1013,0, "国际减轻自然灾害日(减灾日)[1990]",& },&{0x1144,0, "感恩节",&&&&&&&& },&{0x1220,0, "国际儿童电视广播日"&&&&& },&{0,&&&& 0, "结束"&&&&& },&&};
//农历节日HolidayStruct ChinaHoliday[] = {&{0x0101,1,&"春节",&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& },&{0x0115,0,&"元宵节(中国情人节) 壮族歌墟节 朝鲜族上元节 苗族踩山节 达翰尔族卡钦",&&},&{0x0116,0,&"侗族芦笙节(正月十六至二十)",&&&&&&&&&&&&},&{0x0125,0,&"填仓节",&&&&&&&&&&&&&&&&&},&{0x0129,0,&"送穷日",&&&&&&&&&&&&&&&&&},&{0x0201,0,&"瑶族忌鸟节",&&&&&&&&&&&&&&&&},&{0x0202,0,&"春龙节(龙抬头节) 畲族会亲节",&&&&&&&&&&&},&{0x0208,0,&"傈傈族刀杆节",&&&&&&&&&&&&&&&},&{0x0315,0,&"白族三月街(三月十五至廿一)",&&&&&&&&&&&&},&{0x0323,0,&"妈祖生辰 (天上圣母诞辰)",&&&&&&&&&&&&},&{0x0408,0,&"牛王诞",&&&&&&&&&&&&&&&&&},&{0x0418,0,&"锡伯族西迁节",&&&&&&&&&&&&&&&},&{0x0505,1,&"端午节 黎族朝花节 苗族龙船年",&&&&&&&&&&&&&&&&&&&& },&{0x0513,0,&"阿昌族泼水节",&&&&&&&&&& },&{0x0522,0,&"鄂温克族米阔鲁节",&&&&&&&&& },&{0x0529,0,&"瑶族达努节",&&&&&&&&&&& },&{0x0606,0,&"姑姑节 天贶节 壮族祭田节 瑶族尝新节",&&&& },&{0x0624,0,&"彝族、阿昌族、白族、佤族、纳西族、基诺族火把节",&& },&{0x0707,0,&"七七中国情人节(女儿节, 乞巧节)",&&&&&& },&{0x0713,0,&"侗族吃新节",&&&&&&&&&&& },&{0x0715,0,&"中元节 盂兰盆会 普米族转山会",&&&&&& },&{0x0815,1,&"中秋节 拉祜族尝新节",&&&&&&&& },&{0x0909,1,&"重阳节 中国老年节(义务助老活动日)[1989]",&&& },&{0x1001,0,&"祭祖节(十月朝)",&&&&&&&&&& },&{0x1016,0,&"瑶族盘王节",&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& },&{0x1208,0,&"腊八节",&&&&&&&&&&&&& },&{0x1223,0,&"北方灶君节[北方小年(扫房日)]",&&&&&&& },&{0x1224,0,&"南方祭灶节[南方小年(掸尘日)]",&&&&&&& },&{0,0,&"结束",&&&&&&& },&{0x0100,1,&"除夕"&&&&&&&&&&&&& },};
int GetGregorianHoliday(BYTE byMonth, BYTE byDay){&&WORD wDay = Bin2Bcd(byMonth) *256 + Bin2Bcd(byDay);&for (i=0; GregorianHoliday[i].wDay!=0; i++)&{&&if (wDay == GregorianHoliday[i].wDay)&&{&&&&&}//if()&}//for()&return -1;}int GetWeekHoliday(SDateTime *pTime){&&BYTE byWeek = GetWeek(pTime);&BYTE byDayN&BYTE byN&WORD wDay = Bin2Bcd(pTime->byMonth) *256 + byW&for (i=0; WeekHoliday[i].wDay!=0; i++)&{&&if ((WeekHoliday[i].wDay&0xFF0F) == wDay)&&{&&&byNum = (WeekHoliday[i].wDay>>4)&0x0f;&&&if (byNum>=1 && byNum <=4)&&&{&&&&if (pTime->byDay>(byNum-1)*7 && pTime->byDay <= (byNum)*7)&&&&{&&&&&&&&&}//if()&&&}//if()&&&if (byNum>=5 && byNum <=8)&&&{&&&&byDayNum = GetDayNumofMonth(pTime->byMonth, pTime->wYear);&&&&if (pTime->byDay>byDayNum-(byNum-5+1)*7 && pTime->byDay <= byDayNum-(byNum-5)*7)&&&&{&&&&&&&&&}//if()&&&}//if()&&}//if()&}//for()&return -1;}int GetChinaHoliday(BYTE byMonth, BYTE byDay, int year){&&WORD wDay = Bin2Bcd(byMonth) *256 + Bin2Bcd(byDay);&for (i=0; ChinaHoliday[i].wDay!=0; i++)&{&&if (wDay == ChinaHoliday[i].wDay)&&{&&&&&}//if()&}//for()
&if (byMonth == 12 && byDay >=29)&{&&for (i=0; ChinaHoliday[i].wDay!=0; i++)&&{;}//for()&&if (( LunarCalendarTable[year - 1901] & (0x80000 >> (byMonth-1)) ) ==0)&&{&&&return i+1;&&}//if()&&else &&{&&&if (byDay >29)&&&{&&&&return i+1;&&&}//if()&&}&}//if()&return -1;}int MonthAdd[12] = {0,31,59,90,120,151,181,212,243,273,304,334}; int LunarCalendar(int year,int month,int day, unsigned int *returnDay){&&&&&&&&&&&&&&&&&& &unsigned int LunarCalendarDay=0;&&&&&&&&&& &&&&&&&&&&&&&&&&&& &&& int Spring_NY,Sun_NY,StaticDayC&&&&&&&& &&& int index,&&&&&&&&&&&&&& &&&& //Spring_NY 记录春节离当年元旦的天数。&&& //Sun_NY 记录阳历日离当年元旦的天数。&&& if( ((LunarCalendarTable[year-1901] & 0x0060) >> 5) == 1)&&&&&&& Spring_NY = (LunarCalendarTable[year-1901] & 0x001F) - 1;&&& else&&&&&&& Spring_NY = (LunarCalendarTable[year-1901] & 0x001F) - 1 + 31;&&& Sun_NY = MonthAdd[month-1] + day - 1;&&& if( (isleap(year)) && (month > 2))&&&&&&& Sun_NY++;
&&& &&& //StaticDayCount记录大小月的天数 29 或30&&& //index 记录从哪个月开始来计算。&&& //flag 是用来对闰月的特殊处理。&&&&& //判断阳历日在春节前还是春节后&&&& if (Sun_NY >= Spring_NY)//阳历日在春节后(含春节那天)&&& { &&&&&&& Sun_NY -= Spring_NY;&&&&&&& month = 1;&&&&&&& index = 1;&&&&&&& flag = 0;&&&&&&& if( ( LunarCalendarTable[year - 1901] & (0x80000 >> (index-1)) ) ==0)&&&&&&&&&&& StaticDayCount = 29; &&&&&&& else &&&&&&&&&&& StaticDayCount = 30; &&&&&&& while(Sun_NY >= StaticDayCount)&&&&&&& {&&&&&&&&&&& Sun_NY -= StaticDayC&&&&&&&&&&& index++;&&&&&&&&&&& if(month == ((LunarCalendarTable[year - 1901] & 0xF00000) >> 20) )&&&&&&&&&&& {&&&&&&&&&&&&&&& flag = ~&&&&&&&&&&&&&&& if(flag == 0)&&&&&&&&&&&&&&&&&&& month++;&&&&&&&&&&& }&&&&&&&&&&& else &&&&&&&&&&&&&&& month++;&&&&&&&&&&& if( ( LunarCalendarTable[year - 1901] & (0x80000 >> (index-1)) ) ==0)&&&&&&&&&&&&&&& StaticDayCount=29;&&&&&&&&&&& else &&&&&&&&&&&&&&& StaticDayCount=30;&&&&&&& }&&&&&&& day = Sun_NY + 1;&& }&&& else//阳历日在春节前&&& {& &&&&&&& Spring_NY -= Sun_NY;&&&&&&& year--;&&&&&&& month = 12;&&&&&&& if ( ((LunarCalendarTable[year - 1901] & 0xF00000) >> 20) == 0)&&&&&&&&&&& index = 12;&&&&&&& else &&&&&&&&&&& index = 13; &&&&&&& flag = 0;&&&&&&& if( ( LunarCalendarTable[year - 1901] & (0x80000 >> (index-1)) ) ==0)&&&&&&&&&&& StaticDayCount = 29;&&&&&&& else &&&&&&&&&&& StaticDayCount = 30;&&&&&&& while(Spring_NY > StaticDayCount)&&&&&&& {&&&&&&&&&&& Spring_NY -= StaticDayC&&&&&&&&&&& index--;&&&&&&&&&&& if(flag == 0)&&&&&&&&&&&&&&& month--;&&&&&&&&&&& if(month == ((LunarCalendarTable[year - 1901] & 0xF00000) >> 20))&&&&&&&&&&&&&&& flag = ~&&&&&&&&&&& if( ( LunarCalendarTable[year - 1901] & (0x80000 >> (index-1)) ) ==0)&&&&&&&&&&&&&&& StaticDayCount = 29;&&&&&&&&&&& else &&&&&&&&&&&&&&& StaticDayCount = 30;&&&&&&&& }&&&&&&&& day = StaticDayCount - Spring_NY + 1;&&& }&&& LunarCalendarDay |=&&& LunarCalendarDay |= (month << 6);
&*returnDay = LunarCalendarD
&&& if(month == ((LunarCalendarTable[year - 1901] & 0xF00000) >> 20))&&&&&&& return 1;&&& else&&&&&&& return 0;}
int GetLunarYear(int year,int month,int day){&&& int Spring_NY,Sun_NY,StaticDayC&&& int index,
&&& //Spring_NY 记录春节离当年元旦的天数。&&& //Sun_NY 记录阳历日离当年元旦的天数。&&& if( ((LunarCalendarTable[year-1901] & 0x0060) >> 5) == 1)&&&&&&& Spring_NY = (LunarCalendarTable[year-1901] & 0x001F) - 1;&&& else&&&&&&& Spring_NY = (LunarCalendarTable[year-1901] & 0x001F) - 1 + 31;
&&& Sun_NY = MonthAdd[month-1] + day - 1;
&&& if( (!(year % 4)) && (month > 2)) Sun_NY++;
&&& if(Sun_NY >= Spring_NY)&&&&&&&&& else&&&&&& return year - 1;}
int GetChineseEra(int year,int flag){&& if(flag == 0)&&&&& return ((year - 4) % 60) % 10;&& else&&&&& return ((year - 4) % 60) % 12;}
//节气计算//0 小寒 腊月&6& 清明 三月&12 小暑 六月&18 寒露 九月//1 大寒 腊月&7& 谷雨 三月&13 大暑 六月&19 霜降 九月//2 立春& 正月&8& 立夏 四月&14 立秋 七月&20 立冬 十月//3 雨水 正月&9& 小满 四月&15 处暑 七月&21 小雪 十月//4 惊蛰 二月&10 芒种 五月&16 白露 八月&22 大雪 冬月//5 春分 二月&11 夏至 五月&17 秋分 八月&23 冬至 冬月//把当天和日(星期日)的差称为积日,那么第y年(1900年算第0年)第x 个节气的积日是 // F = 365.242 * y + 6.2 + 15.22 * x - 1.9 * sin(0.262 * x) int DaysSince1900( int year,&/* Years since epoch */int yday &/* days since Jan 1& */){&if(year>=0) /* 1970 + */&&return ( (365 * year) + (year + 1) / 4& + yday );&else&&/* 1969 - */&&return ( (365 * year) + (year - 2) / 4& + yday );} int GetSolarTerm(SDateTime *pTime){&SDateTime s1900;&long lNum, lNum2;&long lT&BYTE&double dT&int y = pTime->wYear-1900;
&if (y<0) y = 0;
&memset(&s1900, 0, sizeof(SDateTime));&s1900.wYear = 1900;&s1900.byMonth = 1;&s1900.byDay = 1;&//lNum = GetDayNum(&s1900);&lNum2 = GetDayNum(pTime) ;
&for (i=0; i<24; i++)&{&&//原公式中无+0.05,考虑误差在0.05内,所以加上后取整,可能有问题&&dTemp = (365.242 * y + 6.2 + 15.22 * i - 1.9 * sin(0.262 * i)-DaysSince)+0.05);&&lTemp = (long)dT&&if (lTemp == lNum2)&&{&&&printf("double = %f, long=%d", dTemp, lTemp);&&&return i+1;&&}//if()&}//for()
&return 0;}
/*pStr[0] 返回年的天干地支及属相pStr[1] 返回月份及是否闰月pStr[2] 返回日期pStr[3] 返回月份的天干地支pStr[4] 返回日期的天干地支pStr[5] 返回节气pStr[6] 返回公历的节假日pStr[7] 返回第几个星期几样的节假日pStr[8] 返回农历的节假日//pTxt, 用来放置返回数据字符串//wFlag, 用位来表示相应字符串是否需要显示*/
int GetLunarDay(SDateTime *pTime, char pStr[][128], WORD wFlag){&&& char *ChDay[] = {"*","初一","初二","初三","初四","初五",&&&&&&&&&&&&&&&&&&&&&&&&& "初六","初七","初八","初九","初十",&&&&&&&&&&&&&&&&&&&&&&&&& "十一","十二","十三","十四","十五",&&&&&&&&&&&&&&&&&&&&&&&&& "十六","十七","十八","十九","二十",&&&&&&&&&&&&&&&&&&&&&&&&& "廿一","廿二","廿三","廿四","廿五", &&&&&&&&&&&&&&&&&&&&&&&&& "廿六","廿七","廿八","廿九","三十"};&&& char *ChMonth[] = {"*","正","二","三","四","五","六","七","八","九","十","冬","腊"};&char *AnimalSign[] = {"鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"};&&& char *TianGan[] = {"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"};&&& char *DiZhi[] = {"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"};&&& char *JieQi[] = {"", "小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种",&&"夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至"};&unsigned int LunarCalendarD&int LunarYear, LunarMonth, LunarD&&
&embolism = LunarCalendar(pTime->wYear, pTime->byMonth,pTime->byDay, &LunarCalendarDay);
&if ((wFlag>>1)&1 != 0)&{&&if(embolism)&&{&&&LunarMonth = (LunarCalendarDay & 0x3C0) >> 6;&&&strcpy(pStr[1],"闰");&&&strcat(pStr[1],ChMonth[LunarMonth]);&&}&&else &&{&&&LunarMonth = (LunarCalendarDay & 0x3C0) >> 6;&&&strcpy(pStr[1],ChMonth[LunarMonth]);&&}
&&strcat(pStr[1],"月");&}//if()
&if ((wFlag>>2)&1 != 0)&{&&LunarDay = LunarCalendarDay & 0x3F;&&strcpy(pStr[2],ChDay[LunarDay]);&}
&LunarYear = GetLunarYear(pTime->wYear, pTime->byMonth,pTime->byDay);
&if ((wFlag)&1 != 0)&{&&strcpy(pStr[0],TianGan[GetChineseEra(LunarYear,0)]);&&strcat(pStr[0],DiZhi[GetChineseEra(LunarYear,1)]);&&//puts(Era);&&strcat(pStr[0], "(");&&strcat(pStr[0], AnimalSign[GetChineseEra(LunarYear,1)]);&&strcat(pStr[0], ")年");&}
&if ((wFlag>>3)&1 != 0)&{&&cyclical = (LunarYear-1900)*12+LunarMonth+13;&&strcpy(pStr[3], TianGan[cyclical%10]);&&strcat(pStr[3], DiZhi[cyclical%12]);&&strcat(pStr[3], "月");&}
&if ((wFlag>>4)&1 != 0)&{&&cyclical = (GetDayNum(pTime)+16)%60;&&strcpy(pStr[4], TianGan[cyclical%10]);&&strcat(pStr[4], DiZhi[cyclical%12]);&&strcat(pStr[4], "日");&}
&if ((wFlag>>5)&1 != 0)&{&&strcpy(pStr[5], JieQi[GetSolarTerm(pTime)]);&}
&cyclical = GetGregorianHoliday(pTime->byMonth,pTime->byDay);&if (cyclical>=0 && ((wFlag>>6)&1 != 0)) strcpy(pStr[6], GregorianHoliday[cyclical].strHoliday);&cyclical = GetWeekHoliday(pTime);&if (cyclical>=0 && ((wFlag>>7)&1 != 0)) strcpy(pStr[7], WeekHoliday[cyclical].strHoliday);&cyclical = GetChinaHoliday(LunarMonth, LunarDay, LunarYear);&if (cyclical>=0 && (!embolism)& && ((wFlag>>8)&1 != 0)) strcpy(pStr[8], ChinaHoliday[cyclical].strHoliday);}
阅读(3652) | 评论(2) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请问楼主怎么运行啊
您好,该程序对于1901年春节前的农历计算是有错误的,另外对于函数LunarCalendar()的返回值,建议在闰月之前的那一个月不要返回1,即将其改为
if((month == ((LunarCalendarTable[year - 1901] & 0xF00000) >> 20))&&flag)
这样就分辨出闰月了。谢谢!
请登录后评论。

我要回帖

更多关于 阳历转阴历 的文章

 

随机推荐