?? riqizhuanhuan.txt
字號:
{ 47, 0, 4, 50, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1 }, /* 1988 */
{ 36, 0, 6, 56, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0 },
{ 26, 5, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1 },
{ 45, 0, 1, 6, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0 },
{ 34, 0, 2, 11, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0 }, /* 1992 */
{ 22, 3, 4, 17, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0 },
{ 40, 0, 5, 22, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0 },
{ 30, 8, 6, 27, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1 },
{ 49, 0, 0, 32, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1 }, /* 1996 */
{ 37, 0, 2, 38, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1 },
{ 27, 5, 3, 43, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1 },
{ 46, 0, 4, 48, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1 },
{ 35, 0, 5, 53, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1 }, /* 2000 */
{ 23, 4, 0, 59, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1 },
{ 42, 0, 1, 4, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1 },
{ 31, 0, 2, 9, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0 },
{ 21, 2, 3, 14, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1 }, /* 2004 */
{ 39, 0, 5, 20, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1 },
{ 28, 7, 6, 25, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1 },
{ 48, 0, 0, 30, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1 },
{ 37, 0, 1, 35, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1 }, /* 2008 */
{ 25, 5, 3, 41, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1 },
{ 44, 0, 4, 46, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1 },
{ 33, 0, 5, 51, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1 },
{ 22, 4, 6, 56, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0 }, /* 2012 */
{ 40, 0, 1, 2, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0 },
{ 30, 9, 2, 7, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1 },
{ 49, 0, 3, 12, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1 },
{ 38, 0, 4, 17, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0 }, /* 2016 */
{ 27, 6, 6, 23, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1 },
{ 46, 0, 0, 28, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0 },
{ 35, 0, 1, 33, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0 },
{ 24, 4, 2, 38, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1 }, /* 2020 */
{ 42, 0, 4, 44, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 },
{ 31, 0, 5, 49, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0 },
{ 21, 2, 6, 54, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1 },
{ 40, 0, 0, 59, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1 }, /* 2024 */
{ 28, 6, 2, 5, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0 },
{ 47, 0, 3, 10, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1 },
{ 36, 0, 4, 15, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1 },
{ 25, 5, 5, 20, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0 }, /* 2028 */
{ 43, 0, 0, 26, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1 },
{ 32, 0, 1, 31, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0 },
{ 22, 3, 2, 36, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0 } };
#define lastyear (firstyear+sizeof(lunarcal)/sizeof(struct taglunarcal)-1)
/* 西歷年每月之日數(shù) */
int solarcal[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
/
Top
4 樓guanmj(雪在燒)回復于 2003-01-06 16:34:10 得分 0 * 西歷年每月之累積日數(shù), 平年與閏年 */
int solardays[2][14] = {
{ 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365, 396 },
{ 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366, 397 } };
/* 求此西歷年是否為閏年, 返回 0 為平年, 1 為閏年 */
int getleap( int year )
{
if ( year % 400 == 0 )
return 1;
else if ( year % 100 == 0 )
return 0;
else if ( year % 4 == 0 )
return 1;
else
return 0;
}
/* 西歷農(nóng)歷轉(zhuǎn)換 */
int calconv( struct convdate *cd )
{
int leap, d, sm, y, im, l1, l2, acc, i, lm, kc;
if ( cd->source == 0 ) /* solar */
{
if ( cd->solaryear <= firstyear || cd->solaryear > lastyear )
return 1;
sm = cd->solarmonth - 1;
if ( sm < 0 || sm > 11 )
return 2;
leap = getleap( cd->solaryear );
if ( sm == 1 )
d = leap + 28;
else
d = solarcal[sm];
if ( cd->solardate < 1 || cd->solardate > d )
return 3;
y = cd->solaryear - firstyear;
acc = solardays[leap][sm] + cd->solardate;
cd->weekday = ( acc + lunarcal[y].baseweekday ) % 7;
kc = acc + lunarcal[y].basekanchih;
cd->kan = kc % 10;
cd->chih = kc % 12;
if ( acc <= lunarcal[y].basedays )
{
y--;
cd->lunaryear = cd->solaryear - 1;
leap = getleap( cd->lunaryear );
sm += 12;
acc = solardays[leap][sm] + cd->solardate;
}
else
cd->lunaryear = cd->solaryear;
l1 = lunarcal[y].basedays;
for ( i=0; i<13; i++ )
{
l2 = l1 + lunarcal[y].monthdays[i] + 29;
if ( acc <= l2 )
break;
l1 = l2;
}
cd->lunarmonth = i + 1;
cd->lunardate = acc - l1;
im = lunarcal[y].intercalation;
if ( im != 0 && cd->lunarmonth > im )
{
cd->lunarmonth--;
if ( cd->lunarmonth == im )
cd->lunarmonth = -im;
}
if ( cd->lunarmonth > 12 )
cd->lunarmonth -= 12;
}
else /* lunar */
{
if ( cd->lunaryear < firstyear || cd->lunaryear >= lastyear )
return 1;
y = cd->lunaryear - firstyear;
im = lunarcal[y].intercalation;
lm = cd->lunarmonth;
if ( lm < 0 )
{
if ( lm != -im )
return 2;
}
else if ( lm < 1 || lm > 12 )
return 2;
if ( im != 0 )
{
if ( lm > im )
lm++;
else if ( lm == -im )
lm = im + 1;
}
lm--;
if ( cd->lunardate > lunarcal[y].monthdays[lm] + 29 )
return 3;
acc = lunarcal[y].basedays;
for ( i=0; i acc += lunarcal[y].monthdays[i] + 29;
acc += cd->lunardate;
leap = getleap( cd->lunaryear );
for ( i=13; i>=0; i-- )
if ( acc > solardays[leap][i] )
break;
cd->solardate = acc - solardays[leap][i];
if ( i <= 11 )
{
cd->solaryear = cd->lunaryear;
cd->solarmonth = i + 1;
}
else
{
cd->solaryear = cd->lunaryear + 1;
cd->solarmonth = i - 11;
}
leap = getleap( cd->solaryear );
y = cd->solaryear - firstyear;
acc = solardays[leap][cd->solarmonth-1] + cd->solardate;
cd->weekday = ( acc + lunarcal[y].baseweekday ) % 7;
kc = acc + lunarcal[y].basekanchih;
cd->kan = kc % 10;
cd->chih = kc % 12;
}
return 0;
}
Top
5 樓wyljery( VC Coder)回復于 2003-01-06 16:34:30 得分 0 //文件CalendarConvert.h
#ifndef __CALENDARCONVERT__H_
#define __CALENDARCONVERT__H_
typedef struct CalendarStruct
{
CalendarStruct(){}
CalendarStruct(int m_y,int m_m,int m_d)
{
FillThis(m_y,m_m,m_d);
}
int year;
int month;
int day;
int week;
BOOL isrunyue;
void FillThis(int m_y,int m_m,int m_d)
{
year=m_y;
month=m_m;
day=m_d;
}
void FromFile(CFile &m_file)
{
m_file.Read((char *)&year,sizeof(int));
m_file.Read((char *)&month,sizeof(int));
m_file.Read((char *)&day,sizeof(int));
}
void ToFile(CFile &m_file)
{
m_file.Write((char *)&year,sizeof(int));
m_file.Write((char *)&month,sizeof(int));
m_file.Write((char *)&day,sizeof(int));
}
}CALENDAR;
class CCalendarConvert
{
public:
CCalendarConvert();
~CCalendarConvert();
public:
CALENDAR ConvertToGongLi(CALENDAR m_nongli); //將農(nóng)歷日期轉(zhuǎn)化為公歷日期
CALENDAR ConvertToNongLi(CALENDAR m_gongli); //將公歷日期轉(zhuǎn)化為農(nóng)歷日期
int GetWeekInfo(CALENDAR m_gongli); //根據(jù)公歷日期計算星期
void MakeCalendar(CALENDAR *m_cal,int y,int m,int d);//填充日期結(jié)構(gòu)的年月日
BOOL GongDataIsValid(CALENDAR m_date); //判斷公歷日期是否在界內(nèi)
BOOL NongDataIsValid(CALENDAR m_date); //判斷農(nóng)歷日期是否在界內(nèi)
int GetGongDays(CALENDAR m_start,CALENDAR m_end); //獲取公歷兩個日期之間的天數(shù)
int GetNongDays(CALENDAR m_start,CALENDAR m_end); //獲取農(nóng)歷兩個日期之間的天數(shù)
int DaysFromNewYear(CALENDAR m_day); //公歷日期到元旦的天數(shù)
CALENDAR CalGongDate(int year,int days); //根據(jù)天數(shù)(到元旦)計算公歷日期
int CompareTwoDate(CALENDAR m_fir,CALENDAR m_sec); //比較兩個日期的大小
CALENDAR GetCurGongDate(); //將當前公歷日期合成為結(jié)構(gòu)
CALENDAR GetDateAfterDays(CALENDAR m_first,int m_days);//當前公歷日期后N天的公歷日期
int GetNongRunYue(int year); //獲取農(nóng)歷閏月
CString GetGanZhi(int m_nongyear); //獲取農(nóng)歷年份的干支名稱
void NongMonthToList(int m_nongyear,CComboBox & m_list);//將農(nóng)歷年的月份注入組合框
int GetGongMonthDays(int year,int month); //獲取公歷月的天數(shù)
int GetNongMonthDays(int year,int month); //獲取農(nóng)歷月的天數(shù)
int GetNongMonthDays(int year,int month,BOOL m_run);//獲取農(nóng)歷月的天數(shù)
int GetNongRunYueDays(int year); //獲取農(nóng)歷年閏月天數(shù)
protected:
int GetGongYearDays(int year); //獲取公歷年的天數(shù)
int GetNongYearDays(int year); //獲取農(nóng)歷年的天數(shù)
int DaysFromSpringDay(CALENDAR m_day); //農(nóng)歷日期到春節(jié)的天數(shù)
CALENDAR CalNongDate(int year,int days); //價格天數(shù)(到春節(jié))計算農(nóng)歷日期
BOOL YearIsRunNian(int year); //公歷年是否閏年
BOOL RunYueIsLarge(int year); //判斷閏月是否為大月
BOOL MonthIsRunYue(int year,int month); //判斷是否是閏月
BOOL NongMonthIsLarge(int year,int month); //判斷農(nóng)歷年的月份是否為大月
BOOL GongMonthIsLarge(int month); //判斷公歷月份是否為大月(二月除外)
int GetDaysFromStart(int year); //農(nóng)歷大年初一到元旦的天數(shù)
int Cal2N(int n); //計算2的N次方
CString GetNNameIn60(int index); //獲取60年中的第N年的天干地支名稱
private:
int m_maxyear; //支持的最大年份
int m_minyear; //支持的最小年份
char **CalendarData; //公農(nóng)歷轉(zhuǎn)化數(shù)據(jù)
};
#endif
// 測試代碼
int main ()
{
time_t t1, t2;
struct tm tt;
DWORD dwDiffTime;
char sLunar[32];
tt.tm_year= 2000-1900;
tt.tm_mon=1;
tt.tm_mday=5;
tt.tm_hour=0;
tt.tm_min=0;
tt.tm_sec=0;
t1= mktime(&tt);
for (int i=0; i< 365; i++ ) {
tt.tm_year= 2050-1900;
tt.tm_mon=0;
tt.tm_mday=i;
tt.tm_hour=0;
tt.tm_min=0;
tt.tm_sec=0;
t2= mktime(&tt);
printf("%s", ctime(&t2));
dwDiffTime= difftime(t2,t1) / (60*60*24);
printf("起第 %d 天 ", dwDiffTime);
Lunar2Solar(sLunar, dwDiffTime);
puts(sLunar);
}
getch();
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -