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

📄 calendarexg.cpp

📁 阴阳历转换的代码。可以提供从阳历转化为阴历的功能或相反
💻 CPP
字号:
// CalendarEXG.cpp : Defines the initialization routines for the DLL.
//

#include "stdafx.h"
#include "CalendarEXG.h"
#include "stdlib.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

//
//	Note!
//
//		If this DLL is dynamically linked against the MFC
//		DLLs, any functions exported from this DLL which
//		call into MFC must have the AFX_MANAGE_STATE macro
//		added at the very beginning of the function.
//
//		For example:
//
//		extern "C" BOOL PASCAL EXPORT ExportedFunction[]
//		{
//			AFX_MANAGE_STATE[AfxGetStaticModuleState[]];
//			// normal function body here
//		}
//
//		It is very important that this macro appear in each
//		function, prior to any calls into MFC.  This means that
//		it must appear as the first statement within the 
//		function, even before any object variable declarations
//		as their constructors may generate calls into the MFC
//		DLL.
//
//		Please see MFC Technical Notes 33 and 58 for additional
//		details.
//

/////////////////////////////////////////////////////////////////////////////
// CCalendarEXGApp

BEGIN_MESSAGE_MAP(CCalendarEXGApp, CWinApp)
	//{{AFX_MSG_MAP[CCalendarEXGApp]
		// NOTE - the ClassWizard will add and remove mapping macros here.
		//    DO NOT EDIT what you see in these blocks of generated code!
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCalendarEXGApp construction

CCalendarEXGApp::CCalendarEXGApp()
{
}

/////////////////////////////////////////////////////////////////////////////
// The one and only CCalendarEXGApp object

CCalendarEXGApp theApp;

extern "C" void _stdcall Lunar2Solar(int LYear,int LMonth,int LDate,
									 int *SYear,int *SMonth,int *SDate)
{
	CString NongliData[100];
	//农历数据
	/*!*	国历与农历互相转:其中年份皆用民国年份, 请自行转换 (西元年-1911 = 民国年).
*!****************************************************************************
*!**国农历对映表之说明 :                                                     *
*!****************************************************************************
*!**  前二数字 = 闰月月份, 如果为 13 则没有闰月                              *
*!**  第三至第六数字 = 12 个月之大小月之2进位码->10进位                      *
*!**  例如: 101010101010 = 2730                                              *
*!**       1 : 代表大月(30天) 0 : 代表小月(29天) ==> 1月大2月小3月大.....    *
*!**  第七位数字为闰月天数                                                   *
*!**           0 : 没有闰月之天数                                            *
*!**           1 : 闰月为小月(29天)                                          *
*!**           2 : 闰月为大月(30天)                                          *
*!**  最後2位数字代表阳历之1月1日与阴历之1月1日相差天数                      *
*!****************************************************************************
*!*这对映表只有民国一年至民国一百年, 如不敷您的使用请按照上述之方式自行增加. )
*!*这个程式没有判断您所输入之年,月,日是否正确, 请自行判断. 
*!*如果转换出来之农历的月份是闰月则传给您的值是***负数***
*!*如果农历要转换国历如果是闰月请输入***负数***
*!*	********************************************************************************
*///*********************************************************************************
	//**农历计算参数
NongliData[0]   ="0";//UnUseful";
NongliData[1]   ="132637048";    ////1911
NongliData[2]   ="133365036";
NongliData[3]   ="053365225";
NongliData[4]   ="132900044";
NongliData[5]   ="131386034";
NongliData[6]   ="022778122"; //// ////6
NongliData[7]   ="132395041";
NongliData[8]   ="071175231";
NongliData[9]   ="131175050";
NongliData[10]  ="132635038";
NongliData[11]  ="052891127";
NongliData[12]  ="131701046";  ////////12
NongliData[13]  ="131748035";
NongliData[14]  ="042741223";
NongliData[15]  ="130694043";
NongliData[16]  ="132391032";
NongliData[17]  ="021327122";
NongliData[18]  ="131175040";  ////////18
NongliData[19]  ="061623129";
NongliData[20]  ="133402047";
NongliData[21]  ="133402036";
NongliData[22]  ="051769125";
NongliData[23]  ="131453044";
NongliData[24]  ="130694034";     ////////24
NongliData[25]  ="032158223";
NongliData[26]  ="132350041";
NongliData[27]  ="073213230";
NongliData[28]  ="133221049";
NongliData[29]  ="133402038";
NongliData[30]  ="063466226";  //// ////30
NongliData[31]  ="132901045";
NongliData[32]  ="131130035";
NongliData[33]  ="042651224";
NongliData[34]  ="130605043";
NongliData[35]  ="132349032";
NongliData[36]  ="023371121";  ////////36
NongliData[37]  ="132709040";
NongliData[38]  ="072901128";
NongliData[39]  ="131738047";
NongliData[40]  ="132901036";
NongliData[41]  ="051333226";
NongliData[42]  ="131210044";  //// ////42
NongliData[43]  ="132651033";
NongliData[44]  ="031111223";
NongliData[45]  ="131323042";
NongliData[46]  ="082714130";
NongliData[47]  ="133733048";
NongliData[48]  ="131706038";     ////, ////48
NongliData[49]  ="062794127";
NongliData[50]  ="132741045";
NongliData[51]  ="131206035";
NongliData[52]  ="042734124";
NongliData[53]  ="132647043";
NongliData[54]  ="131318032";       //// ////54
NongliData[55]  ="033878120";
NongliData[56]  ="133477039";
NongliData[57]  ="071461129";
NongliData[58]  ="131386047";
NongliData[59]  ="132413036";
NongliData[60]  ="051245126";      //// ////60
NongliData[61]  ="131197045";
NongliData[62]  ="132637033";
NongliData[63]  ="043405122";
NongliData[64]  ="133365041";
NongliData[65]  ="083413130";
NongliData[66]  ="132900048";    //// ////66
NongliData[67]  ="132922037";
NongliData[68]  ="062394227";
NongliData[69]  ="132395046";
NongliData[70]  ="131179035";
NongliData[71]  ="042711124";
NongliData[72]  ="132635043";      ////////72
NongliData[73]  ="102855132";
NongliData[74]  ="131701050";
NongliData[75]  ="131748039";
NongliData[76]  ="062804128";
NongliData[77]  ="132742047";
NongliData[78]  ="132359036";      ////////78
NongliData[79]  ="051199126";
NongliData[80]  ="131175045";
NongliData[81]  ="131611034";
NongliData[82]  ="031866122";
NongliData[83]  ="133749040";
NongliData[84]  ="081717130";  //// ////84
NongliData[85]  ="131452049";
NongliData[86]  ="132742037";
NongliData[87]  ="052413127";
NongliData[88]  ="132350046";
NongliData[89]  ="133222035";       ////2000
NongliData[90]  ="043477123";        ////2001
NongliData[91]  ="133402042";
NongliData[92]  ="133493031";
NongliData[93]  ="021877121";
NongliData[94]  ="131386039";
NongliData[95]  ="072747128";
NongliData[96]  ="130605048";      ////////96
NongliData[97]  ="132349037";
NongliData[98]  ="053243125";
NongliData[99]  ="132709044";
//NongliData[100] =132890033;
	int YangliData[12];
	YangliData[0]=31;
	YangliData[1]=28;
	YangliData[2]=31;
	YangliData[3]=30;
	YangliData[4]=31;
	YangliData[5]=30;
	YangliData[6]=31;
	YangliData[7]=31;
	YangliData[8]=30;
	YangliData[9]=31;
	YangliData[10]=30;
	YangliData[11]=31;
//	计算阳历年、月、日
//	计算年
	*SYear=LYear;
	int theDate,twmonth,tmonth,tdate2;
	char LLMonth[20];
	CString Data=NongliData[LYear-1911],RunYue,LOLMonth,tdate1,tdate3/*大小月*/;
	RunYue=Data.Left(2);
	LOLMonth=Data.Mid(2,4);
	tdate1=Data.Mid(6,1);//闰月是大月还是小月
	tdate3=Data.Mid(7,2);
	twmonth=atoi(RunYue);//when is 闰月
	tmonth=atoi(LOLMonth);
	int n;
	_itoa(tmonth,LLMonth,2);
	LOLMonth=LLMonth;
	n=LOLMonth.GetLength();
	for(;n<12;n++)
		LOLMonth.Insert(0,'0');
	tdate2=atoi(tdate3);//最後2位数字代表阳历之1月1日与阴历之1月1日相差天数
	//计算阴历该天在阳历中离元旦的时间
	theDate=tdate2;
	CString t;
	for(int i=1;i<LMonth;i++)
	{
		t=LOLMonth.Mid(i-1,1);
		if (t=="1")
		{
			theDate+=30;
		}
		else
		{
			theDate+=29;
		}
	}
	theDate+=LDate;
	//考虑闰月
	if (twmonth<LMonth)
	{
		if (tdate1=="2")
		{
			theDate+=30;
		}
		else if (tdate1=="1")
		{
			theDate+=29;
		}
	}
	else if (twmonth==LMonth)
	{
		AfxMessageBox("该年本月份出现闰月,现换算成第一次该天所在的阳历日!");
	}
	//计算月份
	if (theDate<=31)
	{
		*SMonth=1;
	}
	else if (LYear%4==0)
	{
		theDate-=1;
	}
	for(int j=1;j<13;j++)
	{
		theDate-=YangliData[j-1];
		if (theDate<=0)
		{
			theDate+=YangliData[j-1];
			*SMonth=j;
			*SDate=theDate;
			break;
		}
	}
}

⌨️ 快捷键说明

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