⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calendarconvert.cpp

📁 实现阴历与阳历的相互转换
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    
//获取农历月的天数   
int CCalendarConvert::GetNongMonthDays(int year, int month)   
{   
	int days = NongMonthIsLarge(year, month) ? 30:29;   
	return days;   
}   
    
//获取农历月的天数   
int CCalendarConvert::GetNongMonthDays(int year, int month, BOOL m_run)   
{   
	int days = 0;   
	if(m_run)   
		days = GetNongRunYueDays(year);   
	else   
		days = GetNongMonthDays(year,month);   
	return   days;   
}   
    
//获取公历年的天数   
int CCalendarConvert::GetGongYearDays(int   year)   
{   
	int days = YearIsRunNian(year)?366:365;   
	return   days;   
}   
    
//获取农历年的天数   
int     CCalendarConvert::GetNongYearDays(int   year)   
{   
	int days=0;   
	for(int i = 1; i < 13; i++)   
		days += GetNongMonthDays(year,i);   
	days += GetNongRunYueDays(year);   
	return   days;   
}   
    
//获取农历年闰月天数   
int     CCalendarConvert::GetNongRunYueDays(int   year)   
{   
	if(GetNongRunYue(year)==0)   
		return   0;   
	int   days=RunYueIsLarge(year)?30:29;   
	return   days;   
}   
    
//获取农历闰月   
int CCalendarConvert::GetNongRunYue(int   year)   
{   
	return   (CalendarData[year-m_minyear][2]   &   0x0f);   
}   
    
//公历日期到元旦的天数   
int     CCalendarConvert::DaysFromNewYear(CALENDAR   m_day)   
{   
	int   days=0;   
	for(int   i=1;i<m_day.month;i++)   
		days+=GetGongMonthDays(m_day.year,i);   
	days+=m_day.day;   
	return   days;   
}   
    
//农历日期到春节的天数   
int     CCalendarConvert::DaysFromSpringDay(CALENDAR   m_day)   
{   
	int   days=0;   
	int   month=GetNongRunYue(m_day.year);//处理闰月   
	if(month<m_day.month)   //闰月小于日期月份   
		days+=GetNongRunYueDays(m_day.year);   
	else   
	{   
		if((month==m_day.month)   &&   m_day.isrunyue)//日期月份是闰月   
			days+=GetNongRunYueDays(m_day.year);   
	}   
	for(int   i=1;i<m_day.month;i++)   
		days+=GetNongMonthDays(m_day.year,i);   
	days += m_day.day;   
	return   days;   
}   
    
//公历年是否闰年   
BOOL   CCalendarConvert::YearIsRunNian(int   year)   
{   
	return   (CalendarData[year-m_minyear][0]   &   0x80);   
}   
    
    
//判断闰月是否为大月   
BOOL CCalendarConvert::RunYueIsLarge(int   year)   
{   
	return   (CalendarData[year-m_minyear][0]&0x40);   
}   
    
    
//计算2的N次方   
int CCalendarConvert::Cal2N(int   n)   
{   
	int   ret=1;   
	for(int i=0; i < n; i++)   
		ret *= 2;   
	return ret;   
}   
    
//判断农历年的月份是否为大月   
BOOL   CCalendarConvert::NongMonthIsLarge(int   year,int   month)   
{   
	BOOL   ret=FALSE;   
	if(month<9)   
	{   
		if(CalendarData[year-m_minyear][1]   &   Cal2N(8-month))   
			ret=TRUE;   
	}   
	else   
	{   
		unsigned   char   ch=Cal2N(12-month);   
		ch<<=4;   
		if(CalendarData[year-m_minyear][2]   &   ch)   
			ret=TRUE;   
	}   
	return   ret;   
}   
    
//判断公历月份是否为大月(二月除外)   
BOOL CCalendarConvert::GongMonthIsLarge(int month)   
{   
	BOOL ret = FALSE;   
	if(month < 8)   
	{   
		if(month%2)   
			ret = TRUE;   
	}   
	else   
	{   
		if(!(month%2))   
			ret = TRUE;   
	}   
	return ret;   
}   
    
//农历大年初一到元旦的天数   
int CCalendarConvert::GetDaysFromStart(int   year)   
{   
	return (CalendarData[year-m_minyear][0]&0x3f);   
}   
    
    
/*********暂时没有用到的成员函数***********/   
//判断是否是闰月   
BOOL CCalendarConvert::MonthIsRunYue(int   year,int   month)   
{   
	return (month == GetNongRunYue(year));   
}   
    
//获取公历两个日期之间的天数   
int CCalendarConvert::GetGongDays(CALENDAR   m_start,CALENDAR   m_end)   
{   
	int   days=0;   
	for(int   i=m_start.year;i<m_end.year;i++)   
		days+=GetGongYearDays(i);   
	days-=DaysFromNewYear(m_start);   
	days+=DaysFromNewYear(m_end);   
	return   days;   
}   
    
//获取农历两个日期之间的天数   
int CCalendarConvert::GetNongDays(CALENDAR   m_start,CALENDAR   m_end)   
{   
	int   days=0;   
	for(int   i=m_start.year;i<m_end.year;i++)   
		days += GetNongYearDays(i);   
	days -= DaysFromSpringDay(m_start);   
	days += DaysFromSpringDay(m_end);   
	return   days;   
}   
    
//将当前公历日期合成为结构   
CALENDAR CCalendarConvert::GetCurGongDate()   
{   
	CALENDAR   m_cal;   
	SYSTEMTIME   m_time;   
	GetLocalTime(&m_time);   
	m_cal.year = (int)m_time.wYear;   
	m_cal.month= (int)m_time.wMonth;   
	m_cal.day  = (int)m_time.wDay;   
	m_cal.week = (int)m_time.wDayOfWeek;   
	return m_cal;   
}   
    
//比较两个日期的大小   
int CCalendarConvert::CompareTwoDate(CALENDAR   m_fir,CALENDAR   m_sec)   
{   
	int   m_state=0;   
    
	if(m_fir.year>m_sec.year)   
		m_state=1;   
	else   
	{   
		if(m_fir.year<m_sec.year)   
			m_state=-1;   
		else   
		{   
			if(m_fir.month>m_sec.month)   
				m_state=1;   
			else   
			{   
				if(m_fir.month<m_sec.month)   
					m_state=-1;   
				else   
				{   
					if(m_fir.day>m_sec.day)   
						m_state=1;   
					else   
					{   
						if(m_fir.day<m_sec.day)   
							m_state=-1;   
						else   
							m_state=0;   
					}   
				}   
			}   
		}   
	}   
    
	return m_state;   
}   
    
//获取60年中的第N年的天干地支名称   
CString   CCalendarConvert::GetNNameIn60(int index)   
{   
	char   ShengXiao[25] = "鼠牛虎兔龙蛇马羊猴鸡狗猪";   
	char   TianGan[21]   = "甲乙丙丁戊己庚辛壬癸";   
	char   DiZhi[25]     = "子丑寅卯辰巳午未申酉戌亥";   
	char   buffer[20];   
	memset(buffer, 0, 20);   
	strcpy(buffer, "农历");   
    
	int   m_cur = 0, m_this = 0;   
	int   tian = 0, di = 0;   
	for(int i = 0; i < 60; i++)   
	{   
		tian = i%10;   
		di   = i%12;   
		if(m_this == index)   
		{   
			strncpy(&buffer[4], &TianGan[tian*2], 2);   
			strncpy(&buffer[6], &DiZhi[di*2], 2);   
			strcat(buffer, "年,");   
			strncpy(&buffer[12], &ShengXiao[di*2], 2);   
			strcat(buffer, "年");   
		}   
		m_this++;   
	}   
	return CString(buffer);   
}   
    
    
//获取农历年份的干支名称   
CString   CCalendarConvert::GetGanZhi(int   m_nongyear)   
{         
	int   m_index=(m_nongyear-1924)%60;   
	return   GetNNameIn60(m_index);   
}   
    
  //将农历年的月份注入组合框   
void CCalendarConvert::NongMonthToList(int m_nongyear, CComboBox & m_list)
{

}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -