?/*
*? Gregorian Solar Calendar and Chinese Lunar Calendar
*? 农历; 阳历; 阴历; 节日; 时区; 节气; 干支; 生肖
*? 1900-2100 超酷万年历
*? 本类作者:webmote 2006-09 参考自互联网流行的 1900-2100 超酷万年历,并修改了一部分BUG
*? 有任何问题,请email: luo31@yahoo.com.cn
*? !!!!引用本类,请不要删除此段注释!!!!
*/
#pragma once
class CLunar
{
public:
?CLunar(void);
?~CLunar(void);
public:
?
?//农历
?int???? m_lYear;??? //公元年4位数字
?int???? m_lMonth;?? //农历月数字
?int???? m_lDay;???? //农历日数字
?CString m_cYearName; //年号纪年表示
?CString m_cWordDay; //文字表示的日期
?CString m_cMonthSB; //月大 小?
?BOOL??? m_isLeap;? //是否为农历闰月?
?//八字
?CString m_cYear;?? //年柱,2个中文
?CString m_cMonth;? //月柱,2个中文
?CString m_cDay;??? //日柱,2个中文
?CString m_cAnimal; //动物属相
?
?//节日
?CString m_lunarFestival; //农历节日
?CString m_solarFestival; //公历节日
?CString m_solarTerms;??? //节气
?BOOL??? m_bStrong;?????? //强调的节日 放假日
?/************************************************************************/
?/* 计算农历日期???????????????????????????????????????????????????????? */
?/************************************************************************/
?//计算农历
?void Lunar(COleDateTime tmMeas);
private:
?/************************************************************************/
?/* 农[阴]历所使用的全局常量???????????????????????????????????????????????? */
?/************************************************************************/
?// 日期资料
?static const int m_lunarInfo[]; //农历日期
?static const CString m_GAN[]; //天干
?static const CString m_ZHI[]; //地支
?static const CString m_Animals[]; //生肖
?static const CString m_nStr1[]; //数字的中文描述
?static const CString m_nStr2[]; //数字的中文描述
?//农历节日
?static const CString m_lFtv[];
?/************************************************************************/
?/* 公[阳]历所使用的全局常量???????????????????????????????????????????????? */
?/************************************************************************/?
?static const int m_solarMonth[];??? //月的天数
?static const CString m_solarTerm[];?? //节气的中文描述
?static const int???? m_sTermInfo[]; //节气的日期信息
?static const CString m_monthName[]; //月的英文描述
?//公历节日 *表示放假日
?static const CString m_sFtv[];
?//某月的第几个星期几。 5,6,7,8 表示到数第 1,2,3,4 个星期几
?static const CString m_wFtv[];
?//检测时间
?COleDateTime? m_tmMeas; //检测日期
private:
?//返回农历 y年的总天数
?int getYearDays(int y);
?//返回农历 y年闰月的天数
?int getLeapDays(int y);
?//返回农历 y年闰哪个月 1-12,没闰返回 0
?int getLeapMonth(int y);
?//返回农历 y年m月的总天数
?int getMonthDays(int y,int m);
?//某年的第n个节气为几日(从0小寒起算)
?int getSTerm(int y,int n);
?//得到农历天的描述
?CString getWordDay(int d);
?//得到年号纪年 描述
?CString getYearName(int y);
?//得到干支纪年
?CString getGZ(LONGLONG num);
?//从节日字符里解析出数字,描述,*
?void parseFtv(CString strInfo,int& nFirst,int& nLast,CString& strDesc,BOOL& bStrong);
?//得到当日为本月的第几周
?int getWeekOfMonth(int y,int m,int d);
?//得到当月有几周
?int getWeeksOfMonth(int y,int m);
?//计算指定年代与 UTC时间相差的 100ns 数
?LONGLONG getUTC(int nYear,?????int nMonth,?????int nDay,?????int nHour=0,?????int nMin=0,?????int nSec=0);
};
CPP文件
#include "StdAfx.h"
#include "./lunar.h"
#include <math.h>
//数组存入阴历1900年到2100年每年中的月天数信息,?
//阴历每月只能是29或30天,一年用12(或13)个二进制位表示,对应位为1表30天,否则为29天?
const int CLunar::m_lunarInfo[]={ //农历日期信息
?0x4bd8,0x4ae0,0xa570,0x54d5,0xd260,0xd950,0x5554,0x56af,0x9ad0,0x55d2,?0x4ae0,0xa5b6,0xa4d0,0xd250,0xd255,0xb54f,0xd6a0,0xada2,0x95b0,0x4977,?0x497f,0xa4b0,0xb4b5,0x6a50,0x6d40,0xab54,0x2b6f,0x9570,0x52f2,0x4970,?0x6566,0xd4a0,0xea50,0x6a95,0x5adf,0x2b60,0x86e3,0x92ef,0xc8d7,0xc95f,?0xd4a0,0xd8a6,0xb55f,0x56a0,0xa5b4,0x25df,0x92d0,0xd2b2,0xa950,0xb557,?0x6ca0,0xb550,0x5355,0x4daf,0xa5b0,0x4573,0x52bf,0xa9a8,0xe950,0x6aa0,?0xaea6,0xab50,0x4b60,0xaae4,0x5260,0xf263,0x5b57,?0x96d0,0x4dd5,0x4ad0,0xd4d4,0xd558,0xb540,0xb6a0,0x95a6,?0x95bf,0x49b0,0xa974,0xb27a,0xaf46,0xab60,?0x4af5,0x64b0,0x74a3,0x6b58,0x5ac0,0x96d5,0x92e0,?0xc960,0xd954,0xda50,0x7552,0xabb7,0x25d0,0xcab5,?0xa950,0xb4a0,0xbaa4,0xad50,0x55d9,0x4ba0,0x5176,0xa930,?0x7954,0x5b52,0xa6e6,0xa4e0,0xea65,0xd530,?0x5aa0,0x76a3,0x96d0,0x4afb,0xd0b6,0xd25f,0xd520,0xdd45,?0xb5a0,0x56d0,0x55b2,0xa577,0xaa50,0xb255,0x6d2f,0xada0,?0x4b63,0x937f,0x49f8,0x68a6,0xea5f,0x6b20,0xa6c4,0xaaef,?0x92e0,0xd2e3,0xc960,0xd557,0x5d55,0xa6d0,0x55d4,?0x52d0,0xa9b8,0xb6a6,0x55a0,0xaba4,0x52b0,?0xb273,0x6930,0x7337,0x4b55,0x4b6f,0x54e4,?0xe968,0xdaa0,0x6aa6,0x56df,0xa9d4,0xd150,0xf252,?0xd520
};
const CString CLunar::m_GAN[]={ //天干
?_T("甲"),_T("乙"),_T("丙"),_T("丁"),_T("戊"),_T("己"),_T("庚"),_T("辛"),?_T("壬"),_T("癸")
};
const CString CLunar::m_ZHI[]={ //地支
?_T("子"),_T("丑"),_T("寅"),_T("卯"),_T("辰"),_T("巳"),_T("午"),_T("未"),?_T("申"),_T("酉"),_T("戌"),_T("亥")??
};
const CString CLunar::m_Animals[]={ //生肖
?_T("鼠"),_T("牛"),_T("虎"),_T("兔"),_T("龙"),_T("蛇"),_T("马"),_T("羊"),?_T("猴"),_T("鸡"),_T("狗"),_T("猪")
};
const CString CLunar::m_nStr1[]={ //数字的中文描述
?_T("日"),_T("一"),_T("二"),_T("三"),_T("四"),_T("五"),_T("六"),_T("七"),?_T("八"),_T("九"),_T("十")
};
const CString CLunar::m_nStr2[]={ //数字的中文描述
?_T("初"),_T("十"),_T("廿"),_T("卅"),_T("□")
};
const int CLunar::m_solarMonth[]={??? //月的天数
?31,28,31,30,31
};
const CString CLunar::m_solarTerm[]={?? //节气的中文描述
?_T("小寒"),_T("大寒"),_T("立春"),_T("雨水"),_T("惊蛰"),_T("春分"),_T("清明"),?_T("谷雨"),_T("立夏"),_T("小满"),_T("芒种"),_T("夏至"),_T("小暑"),_T("大暑"),?_T("立秋"),_T("处暑"),_T("白露"),_T("秋分"),_T("寒露"),_T("霜降"),_T("立冬"),?_T("小雪"),_T("大雪"),_T("冬至")
};
const int CLunar::m_sTermInfo[]={ //节气的日期信息
?0,21208,42467,63836,85337,107014,128867,150921,173149,195551,218072,240693,?263343,285989,308563,331033,353350,375494,397447,419210,440795,462224,483532,?504758
};
const CString CLunar::m_monthName[]={ //月的英文描述
?_T("JAN"),_T("FEB"),_T("MAR"),_T("APR"),_T("MAY"),_T("JUN"),_T("JUL"),_T("AUG"),?_T("SEP"),_T("OCT"),_T("NOV"),_T("DEC")
};
const CString CLunar::m_sFtv[]={ //公历节日 *表示放假日
?_T("0101*新年元旦"),?_T("0202 世界湿地日"),?_T("0207 国际声援南非日"),?_T("0210 国际气象节"),?_T("0214 情人节"),?_T("0301 国际海豹日"),?_T("0303 全国爱耳日"),?_T("0308 国际妇女节"),?_T("0312 植树节 孙中山逝世纪念日"),?_T("0314 国际警察日"),?_T("0315 国际消费者权益日"),?_T("0317 中国国医节 国际航海日"),?_T("0321 世界森林日 消除种族歧视国际日"),?_T("0321 世界儿歌日"),?_T("0322 世界水日"),?_T("0323 世界气象日"),?_T("0324 世界防治结核病日"),?_T("0325 全国中小学生安全教育日"),?_T("0330 巴勒斯坦国土日"),?_T("0401 愚人节 全国爱国卫生运动月(四月) 税收宣传月(四月)"),?_T("0407 世界卫生日"),?_T("0422 世界地球日"),?_T("0423 世界图书和版权日"),?_T("0424 亚非新闻工作者日"),?_T("0501 国际劳动节"),?_T("0504 中国五四青年节"),?_T("0505 碘缺乏病防治日"),?_T("0508 世界红十字日"),?_T("0512 国际护士节"),?_T("0515 国际家庭日"),?_T("0517 世界电信日"),?_T("0518 国际博物馆日"),?_T("0520 全国学生营养日"),?_T("0523 国际牛奶日"),?_T("0531 世界无烟日"),?_T("0601 国际儿童节"),?_T("0605 世界环境日"),?_T("0606 全国爱眼日"),?_T("0617 防治荒漠化和干旱日"),?_T("0623 国际奥林匹克日"),?_T("0625 全国土地日"),?_T("0626 国际反毒品日"),?_T("0701 中国共产党建党日 世界建筑日"),?_T("0702 国际体育记者日"),?_T("0707 中国人民抗日战争纪念日"),?_T("0711 世界人口日"),?_T("0730 非洲妇女日"),?_T("0801 中国建军节"),?_T("0808 中国男子节(爸爸节)"),?_T("0815 日本正式宣布无条件投降日"),?_T("0908 国际扫盲日 国际新闻工作者日"),?_T("0910 教师节"),?_T("0914 世界清洁地球日"),?_T("0916 国际臭氧层保护日"),?_T("0918 九·一八事变纪念日"),?_T("0920 国际爱牙日"),?_T("0927 世界旅游日"),?_T("1001*国庆节 世界音乐日 国际老人节"),?_T("1001 国际音乐日"),?_T("1002 国际和平与民主自由斗争日"),?_T("1004 世界动物日"),?_T("1008 全国高血压日"),?_T("1008 世界视觉日"),?_T("1009 世界邮政日 万国邮联日"),?_T("1010 辛亥革命纪念日 世界精神卫生日"),?_T("1013 世界保健日 国际教师节"),?_T("1014 世界标准日"),?_T("1015 国际盲人节(白手杖节)"),?_T("1016 世界粮食日"),?_T("1017 世界消除贫困日"),?_T("1022 世界传统医药日"),?_T("1024 联合国日 世界发展信息日"),?_T("1031 世界勤俭日"),?_T("1107 十月社会主义革命纪念日"),?_T("1108 中国记者日"),?_T("1109 全国消防安全宣传教育日"),?_T("1110 世界青年节"),?_T("1111 国际科学与和平周(本日所属的一周)"),?_T("1112 孙中山诞辰纪念日"),?_T("1114 世界糖尿病日"),?_T("1117 国际大学生节 世界学生节"),?_T("1121 世界问候日 世界电视日"),?_T("1129 国际声援巴勒斯坦人民国际日"),?_T("1201 世界艾滋病日"),?_T("1203 世界残疾人日"),?_T("1205 国际经济和社会发展志愿人员日"),?_T("1208 国际儿童电视日"),?_T("1209 世界足球日"),?_T("1210 世界人权日"),?_T("1212 西安事变纪念日"),?_T("1213 南京大屠杀(1937年)纪念日!紧记血泪史!"),?_T("1221 国际篮球日"),?_T("1224 平安夜"),?_T("1225 圣诞节"),?_T("1229 国际生物多样性日")
};
const CString CLunar::m_wFtv[]={//某月的第几个星期几。 5,4 个星期几
?_T("0110 黑人日"),?_T("0150 世界麻风日"),//一月的最后一个星期日(月倒数第一个星期日)
?_T("0520 国际母亲节"),?_T("0530 全国助残日"),?_T("0630 父亲节"),?_T("0911 劳动节"),?_T("0932 国际和平日"),?_T("0940 国际聋人节 世界儿童日"),?_T("0950 世界海事日"),?_T("1011 国际住房日"),?_T("1013 国际减轻自然灾害日(减灾日)"),?_T("1144 感恩节")
};
const CString CLunar::m_lFtv[]={//农历节日
?_T("0101*春节"),?_T("0115 元宵节"),?_T("0202 龙抬头节"),?_T("0323 妈祖生辰 (天上圣母诞辰)"),?_T("0505 端午节"),?_T("0707 七七中国情人节"),?_T("0815 中秋节"),?_T("0909 重阳节"),?_T("1208 腊八节"),?_T("1224 小年"),?_T("1200*除夕")
};
CLunar::CLunar(void)
{
?m_lYear=0;??? //公元年4位数字
?m_lMonth=0;?? //农历月数字
?m_lDay=0;???? //农历日数字
?m_isLeap=FALSE;? //是否为农历闰月?
?//八字
?m_cYear=_T("");?? //年柱,2个中文
?m_cMonth=_T("");? //月柱,2个中文
?m_cDay=_T("");??? //日柱,2个中文
?m_cAnimal=_T(""); //动物属相
?//节日
?m_lunarFestival=_T(""); //农历节日
?m_solarFestival=_T(""); //公历节日
?m_solarTerms=_T("");??? //节气
?m_bStrong=FALSE;?????? //强调的节日
}
CLunar::~CLunar(void)
{
}
//返回农历 y年的总天数
int CLunar::getYearDays(int y)
{
?int i=0,sum = 348;
?for(i=0x8000; i>0x8; i>>=1)
??sum += (m_lunarInfo[y-1900] & i)? 1: 0;
?return(sum+getLeapDays(y));
}
//返回农历 y年闰月的天数
int CLunar::getLeapDays(int y)
{
?if(getLeapMonth(y))
??return((m_lunarInfo[y-1899]&0xf)==0xf? 30: 29);
?else
??return(0);
}
//返回农历 y年闰哪个月 1-12,没闰返回 0
int CLunar::getLeapMonth(int y)
{
?int lm = m_lunarInfo[y-1900] & 0xf;
?return(lm==0xf?0:lm);
}
//返回农历 y年m月的总天数
int CLunar::getMonthDays(int y,int m)
{
?return((m_lunarInfo[y-1900] & (0x10000>>m))? 30: 29 );
}
// 传入 offset 返回干支,0=甲子
// 年柱 1900年立春后为庚子年(60进制36)
//cyclical(SY-1900+36) + '年 【'+Animals[(SY-4)%12]+'年】
CString CLunar::getGZ(LONGLONG num) {
?return m_GAN[num%10] + m_ZHI[num%12];
}
//某年的第n个节气为几日(从0小寒起算)
int CLunar::getSTerm(int y,int n)
{?
?LONGLONG lUtc1=-22085493000000000; //1900,1,5,0? unit:100ns
?LONGLONG lUtc2=-116444736000000000; //1601,0? unit:100ns
?ULONGLONG lDate=315569259747000;
?lDate *= (y-1900);
?lDate += UInt32x32To64(600000000,m_sTermInfo[n]);
?lDate += lUtc1; //100ns--->ms
?//TRACE("ldate= %I64d/n",lDate);
?lDate -=lUtc2;
?SYSTEMTIME st;
?FileTimeToSystemTime((FILETIME*)&lDate,&st);
?//COleDateTime tmRet(st);?
?return st.wDay;
}
void CLunar::Lunar(COleDateTime tmMeas)
{
?m_tmMeas=tmMeas;
?int i,leap=0,temp=0;
?//COleDateTime tmConst(1900,m_tmMeas.GetHour(),m_tmMeas.GetMinute(),m_tmMeas.GetSecond());
?//COleDateTimeSpan tmSpan=m_tmMeas-tmConst;
?//int offset2=static_cast<int>(floor(tmSpan.GetTotalDays()));
?int y = m_tmMeas.GetYear();
?int m = m_tmMeas.GetMonth();
?int d = m_tmMeas.GetDay();
?
?ASSERT(y>1899 && y<2101);
?m_cYearName=getYearName(y);
?int offset=static_cast<int>(getUTC(y,m,d)/864000000000 - getUTC(1900,31)/864000000000);
?for(i=1900; i<2100 && offset>0; i++) { temp=getYearDays(i); offset-=temp; }
?if(offset<0) { offset+=temp; i--; }
?m_lYear = i;
?leap = getLeapMonth(i); //闰哪个月
?m_isLeap = FALSE;
?for(i=1; i<13 && offset>0; i++) {
??//闰月
??if(leap>0 && i==(leap+1) && (!m_isLeap))
??{ --i; m_isLeap = TRUE; temp = getLeapDays(m_lYear); }
??else
??{ temp = getMonthDays(m_lYear,i); }
??//解除闰月
??if(m_isLeap==TRUE && i==(leap+1)) m_isLeap = FALSE;
??offset -= temp;
?}
?if(offset==0 && leap>0 && i==leap+1)
?{
??if(m_isLeap)
??{
???m_isLeap = FALSE;
??}
??else
??{
???m_isLeap = TRUE;
???--i;
??}
?}
?if(offset<0){
??offset += temp;
??--i;
?}
?m_lMonth = i;
?m_lDay = offset + 1;
?m_cWordDay= getWordDay(m_lDay);
?m_cMonthSB=((m_isLeap?getLeapDays(m_lYear):getMonthDays(m_lYear,m_lMonth))>29)?_T("大"):_T("小");
?//
?//初始化 八字
?//36 年一循环
?年柱 1900年立春后为庚子年(60进制36)
?m_cAnimal=m_Animals[(m_lYear-4)%12];
?m_cYear=getGZ(m_lYear-1900+36);
?///月柱 1900年1月小寒以前为 丙子月(60进制12)
?//m_cMonth= getGZ((y-1900)*12+m+12);
?m_cMonth= getGZ((m_lYear-1900)*12+m_lMonth+1+12);
?//当月一日与 1900/1/1 相差天数
?//1900/1/1与 1970/1/1 相差25567日,1900/1/1 日柱为甲戌日(60进制10)
?LONGLONG dayCyclical = getUTC(y,d)/864000000000+25567+10;
?m_cDay=?getGZ(dayCyclical);?
?
?//
?//初始化 节日
?//公历节气?
?int nMSterm=getSTerm(y,(m-1)*2);
?if(d==getSTerm(y,(m-1)*2))
??m_solarTerms=m_solarTerm[(m-1)*2];
?else if(d==getSTerm(y,(m-1)*2+1))
??m_solarTerms=m_solarTerm[(m-1)*2+1];
?else
??m_solarTerms=_T("");
?//公历节日
?m_solarFestival=_T("");
?m_bStrong=FALSE;
?int nFtvM=0,nFtvD=0;
?CString strDesc;
?BOOL bStrong;
?for(int i=0;i<sizeof(m_sFtv)/sizeof(m_sFtv[0]);i++)
?{
??parseFtv(m_sFtv[i],nFtvM,nFtvD,strDesc,bStrong);
??if(m==nFtvM && d==nFtvD)
??{
???if(!m_solarFestival.IsEmpty())
????m_solarFestival+=_T(" ");
???m_solarFestival+=strDesc;
???m_bStrong=bStrong;???
??}
?}
?//月周节日
?int nWeekNo=0,nWeekDay=0; //第几周,星期几
?for(int i=0;i<sizeof(m_wFtv)/sizeof(m_wFtv[0]);i++)
?{
??parseFtv(m_wFtv[i],bStrong);
??nWeekNo=nFtvD/10;nWeekDay=nFtvD%10; //0--星期日
??if((m==nFtvM) && (m_tmMeas.GetDayOfWeek()-1)==nWeekDay )???
??{
???if((nWeekNo<6 && (getWeekOfMonth(y,d)==nWeekNo)) ||
????(nWeekNo>=6 && ((getWeeksOfMonth(y,m)-getWeekOfMonth(y,d)+6)==nWeekNo)))
???{
????if(!m_solarFestival.IsEmpty())
?????m_solarFestival+=_T(" ");
????m_solarFestival+=strDesc;
????m_bStrong=(m_bStrong?TRUE:bStrong);?
???}
??}
?}
?//黑色星期五
?COleDateTime tmFirst(y,13,0);? //13号是不是星期五
?if(tmFirst.GetDayOfWeek()==6)
?{
??if(!m_solarFestival.IsEmpty())
???m_solarFestival+=_T(" ");
??m_solarFestival+=_T(" 黑色星期五");;
?}
?//复活节只出现在3或4月 复活节日举行此盛会的日子,这个日子是3月21日或其后月满之后的第一个星期天
?//if(m==3 || m==4) {
?//?var estDay = new easter(y);
?//?if(m == estDay.m)
?//??' 复活节 Easter Sunday';
?//}
?//农历节日
?m_lunarFestival=_T("");
?for(int i=0;i<sizeof(m_lFtv)/sizeof(m_lFtv[0]);i++)
?{
??parseFtv(m_lFtv[i],bStrong);
??if((m_lMonth==nFtvM && m_lDay==nFtvD) ||
???(m_lMonth==nFtvM && nFtvD==0 &&? (m_isLeap?getLeapDays(m_lYear):getMonthDays(m_lYear,m_lMonth))==m_lDay)) //最后一天,用0标示
??{
???m_lunarFestival=strDesc;
???m_bStrong=(m_bStrong?TRUE:bStrong);
??}??
?}
?}
}
LONGLONG CLunar::getUTC(int nYear,??????int nMonth,??????int nDay,??????int nHour,??????int nMin,??????int nSec )
{
?// 计算指定年代与 UTC时间相差的 数
?//此段代码 联系 webmote
?LONGLONG lValue=10000;
?return lValue;
}
void CLunar::parseFtv(CString strInfo,BOOL& bStrong)
{
?CString sInfo(strInfo);
?sInfo.TrimLeft();
?sInfo.TrimRight();
?if(sInfo.IsEmpty())
??return;
?CString sFirstNum,sLastNum;
?sFirstNum=sInfo.Left(2);
?sLastNum=sInfo.Mid(2,2);
?nFirst=atoi(sFirstNum.GetBuffer(2));
?nLast=atoi(sLastNum.GetBuffer(2));
?sFirstNum.ReleaseBuffer();
?sLastNum.ReleaseBuffer();
?CString sStrong=sInfo.Mid(4,1);
?if(sStrong==_T("*"))
??bStrong=TRUE;
?else
??bStrong=FALSE;
?strDesc=sInfo.Mid(5);
?strDesc.TrimLeft();
}
int CLunar::getWeekOfMonth(int y,int d)
{
?COleDateTime tm(y,0);
?COleDateTime tmCurr(y,d,0);
?int nSpanDays=d-1;
?int nWeekSpan=nSpanDays/7+1;
?int nWeekDay=tm.GetDayOfWeek()+nSpanDays%7;
?if(nWeekDay>7)
?{
??nWeekDay-=7;
??nWeekSpan++;
?}
?TRACE("week=%d/n",nWeekDay);
?return nWeekSpan;
}
int CLunar::getWeeksOfMonth(int y,int m)
{
?//计算当月天数
?int nMonths=0;
?static int cDaysInMonth[] = {31,31};
?nMonths=cDaysInMonth[m-1];
?if(y % 100 != 0 && y % 4 == 0)
?{
??if(m==2)
???nMonths += 1;
?}
?return getWeekOfMonth(y,nMonths);?
}
//中文日期
CString? CLunar::getWordDay(int d){
?CString s;
?switch (d) {
?? case 10:
??? s = _T("初十");
??? break;
?? case 20:
??? s = _T("二十");
??? break;
?? case 30:
??? s = _T("三十");
??? break;
?? default :
??? s = m_nStr2[d/10];
??? s += m_nStr1[d%10];
?}
?return s;
}
//年号
CString CLunar::getYearName(int y)
{
?CString cYear,cTmp;
?if(y>1874 && y<1909)? //光绪
?{
??(y-1874==1)?cTmp=_T("元"):cTmp.Format(_T("%d"),y-1874);
??cYear.Format(_T("光绪%s年"),cTmp);
?}
?else if(y>1908 && y<1912)? //宣统
?{
??(y-1908==1)?cTmp=_T("元"):cTmp.Format(_T("%d"),y-1908);
??cYear.Format(_T("宣统%s年"),cTmp);
?}
?else if(y>1911 && y<1950) //民国
?{
??(y-1911==1)?cTmp=_T("元"):cTmp.Format(_T("%d"),y-1911);
??cYear.Format(_T("民国%s年"),cTmp);
?}
?else if(y>1949)?????????? //共和国
?{
??(y-1949==1)?cTmp=_T("元"):cTmp.Format(_T("%d"),y-1949);
??cYear.Format(_T("共和国%s年"),cTmp);
?}
?else
??cYear.Format(_T("公元%d年"),y);
?return cYear;
}
? (编辑:北几岛)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|