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

📄 yinyang.h

📁 在wince上运行的万年历程序
💻 H
📖 第 1 页 / 共 2 页
字号:
    else
    if (yYin == YinYears[0])  result = YearNames[0]+_T("元年 ");
    else
    if (yYin < YinYears[1] ) 
		{
		//result =Format(_T("%s%d年 "), [YearNames[1], yYin-YinYears[1]+1 ]);
		wsprintf(tc,_T("%d"),yYin-YinYears[0]+1);
		result =YearNames[0]+tc+_T("年 ");
		}
	else
    if (yYin == YinYears[1])  result = YearNames[1]+_T("元年 ");
    else
    if (yYin < YinYears[2] )  
		{
		// result =Format("%s%d年 ", [YearNames[2], yYin-YinYears[2]+1 ]);
		wsprintf(tc,_T("%d"),yYin-YinYears[1]+1);
		result =YearNames[1]+tc+_T("年 ");
		}
    else result = "";

    //{Compare Yang year}
    DecodeDate( dateYang, y, m, d );
	if (y < MinGuoYear[0])return "";
    else
    if (y == MinGuoYear[0]) result = YearNames[2]+_T("元年 ");
    else
    if (y < MinGuoYear[1] )
		{
	    //result =Format("%s%d年 ", [YearNames[3], y-MinGuoYear[1]+1 ]);
		wsprintf(tc,_T("%d"),y-MinGuoYear[0]+1);
		result =YearNames[2]+tc+_T("年 ");
		}

    else result = "";
	
	return result;
}

CString YinFestival(int mYin,int dYin,BOOL bLeapMonth )
{
int i;
CString  result = "";
if ( bLeapMonth == TRUE ) return "";
for (i =0;i<YinFestivalCount;i++)
	{
	if (( mYin == YinFestivalMonth[i] )&&( dYin == YinFestivalDay[i] ) )
		{
		result = " (" + YinFestivalName[i] + ")";
		break;
		}
	}
return result;
}

CString  YangFestival(int y,int m,int d)
{
int  i, yYin,mYin,dYin, y2, m2, d2, nGap;
BOOL  bLeapM;
CString  s;
CString result = "";
//{Fixed-date festivals}
  for (i =0 ;i<YangFestivalCount;i++)
	{
	if ( (m == YangFestivalMonth[i] ) &&( d == YangFestivalDay[i] ))
		{
		 result = YangFestivalName[i];
		break;
		}
	}
//{Variable-date festivals  以下是日期不固定的节日:
//   复活节: 3月21日月圆后(当天非月圆时,延后至月圆后)的第一个星期日
//   母亲节: 5月的第二个星期日
//   父亲节: 6月的第三个星期日
//   感恩节: 11月的第四个星期四(美国) }
  s = "";
  switch(m)
	{
    case 3:
	case 4:	
		if ((DayOfWeek( EncodeDate(y,m,d)) == 1) &&//  {Is Sunday}
			( DateYang2Yin( EncodeDate(y,3,21), yYin,mYin,dYin,bLeapM ) == TRUE ))
			{
			 y2 = y;  
			 m2 = 3;
			 d2 = 21;
			 //{1.Calc midmonth day after 3.21 first}
			if( dYin <= 15) nGap = 15- dYin;
			else nGap = DaysOfYinMonth( yYin, mYin )- dYin + 15;
			d2 = d2 + nGap;
			if (d2 > 31)
				{
				m2 = m2 + 1;
				d2 = d2 - 31;
				}
			//{2. Then calc Sunday after the midmonth day}
			d2= d2 + 8- DayOfWeek( EncodeDate(y2,m2,d2) );
			if ((m2 == 3) &&(d2 > 31))
				{
				m2 = m2 + 1;
				d2 = d2 - 31;
				}
			if ((m2 == m) && (d2 == d))
				s = "复活节";
			}
    case 5: if ((d>7 ) && (d<15) && (DayOfWeek( EncodeDate(y,m,d)) == 1))
         s = "母亲节";
    case 6: if ((d>14) &&(d<22) && (DayOfWeek( EncodeDate(y,m,d)) == 1))
         s = "父亲节";
    case 11:if ((d>21) && (d<29) && (DayOfWeek( EncodeDate(y,m,d)) == 5))
		 s = "感恩节";
	}

  if (s != "")
  {
    if (result != "") result = result + ", " + s;
    else  result = s;
  }
return result;
}

CString DateYang2JieQi(CTime dYang )  //{98.3.19}
{
CString result;
  WORD y,m,d;
  WORD dJQ[2];
  DecodeDate( dYang, y, m, d );
  if (( y < JieQiStartYear ) ||( y > JieQiEndYear ))
	{
    result = "";  
	return result;
	}

  dJQ[1] = _ttoi( JieQiOfYear[y-JieQiStartYear,1][m]);//StrToInt( JieQiOfYear[y,1][m] );
  dJQ[2] = _ttoi( JieQiOfYear[y-JieQiStartYear,2][m]);//StrToInt( JieQiOfYear[y,2][m] );
  if (dJQ[2] < 7)
    dJQ[2] = dJQ[2] + 20;
  else
    dJQ[2] = dJQ[2] + 10;
  
  if ( d == dJQ[1] ) 
	  result = " (" + JieQi[ m*2 -1-JieQiStartYear ] + ")";
  else if ( d == dJQ[2] )
	  result = " (" + JieQi[ m*2 -JieQiStartYear] + ")";
  else
    result = "";
return result;
}

BOOL IsLeapYear(int AYear)
{
 return (AYear % 4 == 0) && ((AYear % 100 != 0) || (AYear % 400 == 0));
}

CString CDayOfWeek(CTime date)
{
CString result;
int n;
n = DayOfWeek( date );
if ((n<1) || (n>7))result = "";
  else  result = "星期" + CCweek[ n ];
return result;
}

int DaysOfYinMonth(int  yYin,int mYin)
{
int n,result;
// {NOTE: If 4th month is lunar(two 4th), mYin=7 means 6th month! }
//  {Is year/month valid? }
  if ((yYin<YEAR_START) || (yYin>YEAR_END) ||
     (mYin<1) || (mYin>13) ||
     ( (mYin==13) && (LeapMonthOfYear[yYin-YEAR_START]==0) ))
	{
    result = 0;
    return result;
	}

  n = YinMonthsOfYear[yYin-YEAR_START];
  n = n >> (mYin-1);
  if ( n & 0x1 == 1 )
     result = 30;  //{大月}
  else
     result = 29;// {小月}
return result;
}

LONG DaysOfYinYear( int y )
{
int  m;
LONG  result = 0;
for (m= 1;m<=13;m++)
    result = result + DaysOfYinMonth( y, m );
return result;
}

LONG CalcYinDatesSpan(int Y,int M,int D,BOOL bLeapMonth,
   int y1,int m1,int d1,BOOL bLeapMonth1 )
   //{Calc the days count between two Yin dates: return (YMD-ymd) }
{
int  nTotalSign, nDays_md1, nDays_MD, k, t;
LONG  lTotalDays,result;
  if ((LeapMonthOfYear[Y-YEAR_START]  > 0) && ((LeapMonthOfYear[Y-YEAR_START] < M ) ||
     (bLeapMonth && (LeapMonthOfYear[Y-YEAR_START] == M))))  M = M + 1;
  if ((LeapMonthOfYear[y1-YEAR_START] > 0) && ((LeapMonthOfYear[y1-YEAR_START] < m1 )||
     (bLeapMonth1 && (LeapMonthOfYear[y1-YEAR_START] == m1)))) m1 = m1 + 1;

  if( y1 < Y ) nTotalSign = 1;
  else if( y1 > Y ) nTotalSign = -1;
  else if( m1 < M ) nTotalSign =  1;
  else if( m1 > M ) nTotalSign = -1;
  else if( d1 < D ) nTotalSign =  1;
  else if( d1 > D ) nTotalSign = -1;
  else 
	{
    result = 0;//    {the same dates!}
    return result;
	}

  //{Assume YMD as Base Date and make sure YMD > ymd}
  if( nTotalSign == -1 )
	{
    t = Y;
	Y = y1;
	y1 = t;
	t = M;
	M = m1;
	m1 = t;
    t = D;
	D = d1;
	d1 = t;
	}

  //{Calc days between ymd and y11}
  nDays_md1 = 0;
  for( k=1;k<=m1-1;k++)
	nDays_md1 = nDays_md1 + DaysOfYinMonth( y1, k );
  nDays_md1 = nDays_md1 + d1;
	

  //{Calc days between YMD and Y11}
  nDays_MD = 0;
  for (k=1;k<=M-1;k++)
    nDays_MD = nDays_MD + DaysOfYinMonth( Y, k );
  nDays_MD = nDays_MD + D;

  //{Calc the total days between YMD and ymd}
  lTotalDays = 0;
  for (k=y1;k<=Y-1;k++)
    lTotalDays = lTotalDays + DaysOfYinYear( k );
  lTotalDays = lTotalDays + nDays_MD - nDays_md1;
  lTotalDays = lTotalDays * nTotalSign;

  result = lTotalDays;
  return result;	
}


CString MonthYin2GanZhi(int yYin,int mYin)
{
int  nSign, y, m, t, n, g, z;
LONG  lMonths;
//{NOTE: Yin leap month has same GanZhi with its prev
//   month, so we can say that every Yin year has 12 months here.}
  y = YinDateBase[YEAR];
  m = YinDateBase[MONTH];

  if (yYin > y) nSign = 1;
  else if (yYin < y) nSign = -1;
  else if (mYin > m ) nSign = 1;
  else if (mYin < m ) nSign = -1;
  else 
	{
    nSign = 1;
    n = YinGanZhiBase[MONTH];
	}
  
  //{Make sure that yYin.mYin >= y.m }
  if (nSign == -1)
	{
    t = yYin;
	yYin = y;
	y = t;
    t = mYin;
	mYin = m;
	m = t;
	}

  lMonths = ( (yYin - y)*12 + mYin - m )* nSign + YinGanZhiBase[MONTH];
  GetGanZhi( lMonths, g, z );
  return TianGan[g-1] + DiZhi[z-1];
}

CString YearYin2GanZhi(int yYin)
{
 LONG lYears;
 int  g, z;
 lYears =  yYin - YinDateBase[YEAR] + YinGanZhiBase[YEAR];
  GetGanZhi( lYears, g, z );
  return TianGan[g-1] + DiZhi[z-1];
}


void GetGanZhi(LONG l,int& g,int& z )
{
  g =l%10;
  if (g <= 0)   g = g + 10;

  z =  l % 12;
  if (z <= 0) z = z + 12;
}

CString DateYin2GanZhi(int yYin,int mYin,int dYin,BOOL bLeapMonth)
{
  //int lDays;
  LONG lDays;
  int g, z;
  lDays = CalcYinDatesSpan( yYin, mYin, dYin,bLeapMonth,
      YinDateBase[YEAR],YinDateBase[MONTH], YinDateBase[DAY],
      bYinBaseLeapMonth ) + YinGanZhiBase[DAY];
  GetGanZhi( lDays, g, z );
  return TianGan[g-1] + DiZhi[z-1];
}

#endif

⌨️ 快捷键说明

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