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

📄 ymdlunar.c

📁 深圳市微逻辑电子有限公司 巨果&#8226 Kingmos&reg 系统核心
💻 C
📖 第 1 页 / 共 2 页
字号:
	return ( WORD )bLeapThisYear ;
}

// ********************************************************************
//声明:WORD	Lunar_GetDaysOfMonth( WORD wYear, WORD wMonth, BOOL bLeap )
//参数:
//	IN wYear - 给定的农历年
//	IN wMonth - 给定的农历月
//	IN bLeap - 给定的这个月是否为润月(第2个月)
//返回值:
//	得到该年月的天数
//功能描述:得到该年月的天数
//引用: 
// ********************************************************************
WORD	Lunar_GetDaysOfMonth( WORD wYear, WORD wMonth, BOOL bLeap )
{
	WORD				wYearDays ; // store data from array
	WORD				wLeapMonth ;
	WORD				wMonthIndex ;// 1 ~ 12 or 1 ~ 13 if the year have leap month
	if( ( wYear > LUNAR_YEAR_MAX )||( wYear < LUNAR_YEAR_MIN ) )
		return 0 ;
	wYearDays = g_LunarMonthDay[ wYear - LUNAR_YEAR_MIN ] ;

	wLeapMonth = Lunar_GetLeapMonth( wYear ) ;
	if( ( ( wLeapMonth == wMonth )&&( bLeap == TRUE ) )||
		( ( wLeapMonth > 0 )&&( wMonth > wLeapMonth ) ) )
		wMonthIndex = wMonth + 1 ;
	else
		wMonthIndex = wMonth ;

	wMonthIndex = 0x8000 >> ( wMonthIndex - 1 ) ;
	if( wMonthIndex&wYearDays )
		return 30 ;
	else
		return 29 ;
}

// ********************************************************************
//声明:BOOL	Lunar_GetYMDFromAD( WORD wYear, WORD wMonth, WORD wDay, WORD *pwLYear, WORD *pwLMonth, WORD *pwLDay, BOOL *pbLeap )
//参数:
//	IN wYear - 给定的公历年
//	IN wMonth - 给定的公历月
//	IN wDay - 给定的公历日
//	IN pwLYear - 计算得到的农历年
//	IN pwLMonth - 计算得到的农历月
//	IN pwLDay - 计算得到的农历日
//	IN pbLeap - 计算得到的是否农历润月
//返回值:
//	TRUE表示计算成功
//功能描述:根据公历年月日,计算出对应的农历年月日,及是否农历润月
//引用: 
// ********************************************************************
BOOL	Lunar_GetYMDFromAD( WORD wYear, WORD wMonth, WORD wDay, WORD *pwLYear, WORD *pwLMonth, WORD *pwLDay, BOOL *pbLeap )
{
	WORD			wAllDays=0 ;
	WORD			wLunarYear, wLunarMonth, wLunarDays, wLunarMonthDays ;
	WORD			i;

	if( ( wYear > LUNAR_YEAR_MAX )||( wYear < LUNAR_YEAR_MIN ) )
		return FALSE ;

	// Get the days from LUNAR_YEAR_MIN to wYear, but exclude wYear
	for( i = LUNAR_YEAR_MIN ; i < wYear  ; i ++ )
	{
        wAllDays+=IsLeap( ( short ) i )? 366 : 365 ;
	}
	// Get the Days from Jannary to wMonth,but exclude wMonth
	for( i = 1 ; i < wMonth; i ++ )
	{
		wAllDays += GetDayofTheMonth( wYear, i );
	}
	// Get the days of the wDay ;
	wAllDays += wDay ;

	wAllDays -= 49;// 49 = sun calendar days - lunar calendar days ;
	
	wLunarYear = Lunar_GetYearByDays( wAllDays, &wLunarDays );

	wLunarMonth = Lunar_GetMonthByDays( wLunarYear, wLunarDays,&wLunarMonthDays,pbLeap );
	
	*pwLYear = wLunarYear ;
	*pwLMonth = wLunarMonth ;
	*pwLDay = wLunarMonthDays ;

	return TRUE ;
}


// ********************************************************************
//声明:BOOL	Lunar_GetYMDsFromADMonth( WORD wYear, WORD wMonth, WORD wDaysOfMonth, WORD arrLunarYMD[][3] )
//参数:
//	IN wYear - 给定的公历年
//	IN wMonth - 给定的公历月
//	IN wDaysOfMonth - 给定的公历月中的天数
//	IN arrLunarYMD - 计算得到的农历年月日的数组
//返回值:
//	TRUE表示计算成功
//功能描述:根据公历年月和这个月的天数,计算出在该公历年月对应的农历年月日
//引用: 
// ********************************************************************
BOOL	Lunar_GetYMDsFromADMonth( WORD wYear, WORD wMonth, WORD wDaysOfMonth, WORD arrLunarYMD[][3] )
{
	BOOL	bLeap;
	WORD	wDay;

	if( wDaysOfMonth==0 )
	{
		wDaysOfMonth = GetDayofTheMonth( wYear, wMonth );
	}
	for( wDay=1; wDay<=wDaysOfMonth; wDay++ )
	{
		if( !Lunar_GetYMDFromAD( wYear, wMonth, wDay, &arrLunarYMD[wDay][0], 
								&arrLunarYMD[wDay][1], &arrLunarYMD[wDay][2], &bLeap ) )
		{
			return FALSE;
		}
	}
	return TRUE;
}

//===========================================
static const TCHAR c1[][3] = 
{ "甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸" };
static const TCHAR c2[][3] = 
{ "子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥" };

// ********************************************************************
//声明:void	Lunar_GetNameYear( WORD wYear, LPTSTR pszTemp )
//参数:
//	IN wYear - 给定的农历年
//	IN pszTemp - 计算得到的农历年的甲子String
//返回值:
//	无
//功能描述:得到该年的甲子表示
//引用: 
// ********************************************************************
void	Lunar_GetNameYear( WORD wYear, LPTSTR pszTemp )
{
	int x, y, ya ;
	ya = wYear+8;
	if( ya < 1 )
	{
		ya = ya + 1;
	}
	if( ya < 12 )
	{
		ya = ya + 60;
	}
	x = ( ya + 8 - ( ( ya + 7 ) / 10 ) * 10 )%10;
	y = ( ya - ( ( ya-1 ) / 12 ) * 12 )%12;
	strcpy( pszTemp, c1[x] );
	strcat( pszTemp, c2[y] );
}

// ********************************************************************
//声明:void	Lunar_GetNameMonth( WORD wMonth, LPTSTR pszTemp )
//参数:
//	IN wMonth - 给定的农历月
//	IN pszTemp - 计算得到的农历月的中文编号表示String
//返回值:
//	无
//功能描述:得到该月的中文编号表示(“正、二、三、... 十、冬、腊”)
//引用: 
// ********************************************************************
void	Lunar_GetNameMonth( WORD wMonth, LPTSTR pszTemp )
{
	ASSERT( wMonth<=ARR_COUNT(szMonths) );
	sprintf( pszTemp,"%s月",szMonths[wMonth-1] ) ;
}

// ********************************************************************
//声明:void	Lunar_GetNameDay( WORD wMonth, WORD wDay, LPTSTR pszTemp )
//参数:
//	IN wMonth - 给定的农历月
//	IN wDay - 给定的农历日
//	IN pszTemp - 计算得到的农历日的中文编号表示String
//返回值:
//	无
//功能描述:得到该月指定日的中文编号表示(“初一 ... 十五 ... 三十”)
//引用: 
// ********************************************************************
void	Lunar_GetNameDay( WORD wMonth, WORD wDay, LPTSTR pszTemp )
{
	if( !wMonth && (wDay == 1) )
	{
		sprintf( pszTemp,"%s月",szMonths[wMonth-1] ) ;
	}
	else
	{
		ASSERT( wDay<=ARR_COUNT(szDays) );
		strcpy( pszTemp, szDays[wDay-1] );
	}
}

// ********************************************************************
//声明:void	Lunar_GetNameYMD( WORD wYear, WORD wMonth, WORD wDay, LPTSTR pszTemp )
//参数:
//	IN wYear - 给定的农历年
//	IN wMonth - 给定的农历月
//	IN wDay - 给定的农历日
//	IN pszTemp - 计算得到的农历年月日的中文编号表示String
//返回值:
//	无
//功能描述:得到该年月日的中文编号表示(“甲子年 正月 初一”)
//引用: 
// ********************************************************************
void	Lunar_GetNameYMD( WORD wYear, WORD wMonth, WORD wDay, LPTSTR pszTemp )
{
	TCHAR	pszYear[12];

	ASSERT( wMonth<=ARR_COUNT(szMonths) );
	ASSERT( wDay<=ARR_COUNT(szDays) );
	Lunar_GetNameYear( wYear, pszYear );
	sprintf( pszTemp,"%s年 %s月 %s", pszYear, szMonths[wMonth-1], szDays[wDay-1] );
}


// ********************************************************************
//声明:void	Lunar_GetYearRange( WORD* pwYearMin, WORD* pwYearMax )
//参数:
//	IN pwYearMin - 保存最低年
//	IN pwYearMax - 保存最高年
//返回值:
//	无
//功能描述:获取该农历算法的年范围
//引用: 
// ********************************************************************
void	Lunar_GetYearRange( WORD* pwYearMin, WORD* pwYearMax )
{
	*pwYearMin = LUNAR_YEAR_MIN;
	*pwYearMax = LUNAR_YEAR_MAX;
}


// ********************************************************************
//声明:BOOL	Lunar_CheckYear( WORD wYear )
//参数:
//	IN wYear - 待检查的年
//返回值:
//	TRUE表示在该范围内
//功能描述:检查wYear年,是否在该农历算法的年范围内
//引用: 
// ********************************************************************
BOOL	Lunar_CheckYear( WORD wYear )
{
	if( wYear>=LUNAR_YEAR_MIN && wYear<=LUNAR_YEAR_MAX )
	{
		return TRUE;
	}
	else
	{
		return FALSE;
	}
}

⌨️ 快捷键说明

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