农历类==解析指定的日期 1900-2100

 /*
*  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,0xa570,0x5260,0xf263,0xd950,0x5b57,0x56a0,
 0x96d0,0x4dd5,0x4ad0,0xa4d0,0xd4d4,0xd250,0xd558,0xb540,0xb6a0,0x95a6,
 0x95bf,0x49b0,0xa974,0xa4b0,0xb27a,0x6a50,0x6d40,0xaf46,0xab60,0x9570,
 0x4af5,0x4970,0x64b0,0x74a3,0xea50,0x6b58,0x5ac0,0xab60,0x96d5,0x92e0,
 0xc960,0xd954,0xd4a0,0xda50,0x7552,0x56a0,0xabb7,0x25d0,0x92d0,0xcab5,
 0xa950,0xb4a0,0xbaa4,0xad50,0x55d9,0x4ba0,0xa5b0,0x5176,0x52bf,0xa930,
 0x7954,0x6aa0,0xad50,0x5b52,0x4b60,0xa6e6,0xa4e0,0xd260,0xea65,0xd530,
 0x5aa0,0x76a3,0x96d0,0x4afb,0x4ad0,0xa4d0,0xd0b6,0xd25f,0xd520,0xdd45,
 0xb5a0,0x56d0,0x55b2,0x49b0,0xa577,0xa4b0,0xaa50,0xb255,0x6d2f,0xada0,
 0x4b63,0x937f,0x49f8,0x4970,0x64b0,0x68a6,0xea5f,0x6b20,0xa6c4,0xaaef,
 0x92e0,0xd2e3,0xc960,0xd557,0xd4a0,0xda50,0x5d55,0x56a0,0xa6d0,0x55d4,
 0x52d0,0xa9b8,0xa950,0xb4a0,0xb6a6,0xad50,0x55a0,0xaba4,0xa5b0,0x52b0,
 0xb273,0x6930,0x7337,0x6aa0,0xad50,0x4b55,0x4b6f,0xa570,0x54e4,0xd260,
 0xe968,0xd520,0xdaa0,0x6aa6,0x56df,0x4ae0,0xa9d4,0xa4d0,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,30,31,31,30,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,6,7,8 表示到数第 1,2,3,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,6,2,5,0  unit:100ns
 LONGLONG lUtc2=-116444736000000000; //1601,1,1,0,0,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,1,31,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,1,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,m,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],nFtvM,nFtvD,strDesc,bStrong);
  nWeekNo=nFtvD/10;nWeekDay=nFtvD%10; //0--星期日
  if((m==nFtvM) && (m_tmMeas.GetDayOfWeek()-1)==nWeekDay )   
  {
   if((nWeekNo<6 && (getWeekOfMonth(y,m,d)==nWeekNo)) ||
    (nWeekNo>=6 && ((getWeeksOfMonth(y,m)-getWeekOfMonth(y,m,d)+6)==nWeekNo)))
   {
    if(!m_solarFestival.IsEmpty())
     m_solarFestival+=_T(" ");
    m_solarFestival+=strDesc;
    m_bStrong=(m_bStrong?TRUE:bStrong); 
   }
  }
 }

 //黑色星期五
 COleDateTime tmFirst(y,m,13,1,0,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],nFtvM,nFtvD,strDesc,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,int& nFirst,int& nLast,CString& strDesc,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 m,int d)
{
 COleDateTime tm(y,m,1,1,0,0);
 COleDateTime tmCurr(y,m,d,1,0,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, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
 nMonths=cDaysInMonth[m-1];
 if(y % 100 != 0 && y % 4 == 0)
 {
  if(m==2)
   nMonths += 1;
 }
 return getWeekOfMonth(y,m,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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

webmote

如果能帮到你,请支持下博主

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值