📄 calendarexg.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 + -