微信节气码
{
int源;
int SolarYear
int SolarMonth
int SolarDate
阴历间;
阴历月间;
int LunarDate
int工作日;
int Kan
int Chih
};
unsigned _ _ int 64m _ ui 64 solar terms[24];
unsigned _ _ int 64m _ ui64 month days[13];
m _ ui64 month days[0]= 0ui 64;
m _ ui64 month days[1]= 31ui 64;
m _ ui64 month days[2]= 28ui 64;
m _ ui64 month days[3]= 31ui 64;
m _ ui64 month days[4]= 30ui 64;
m _ ui64 month days[5]= 31ui 64;
m _ ui64 month days[6]= 30ui 64;
m _ ui64 month days[7]= 31ui 64;
m _ ui64 month days[8]= 31ui 64;
m _ ui64 month days[9]= 30ui 64;
m _ ui64 month days[10]= 31ui 64;
m _ ui 64 month days[11]= 30ui 64;
m _ ui64 month days[12]= 31ui 64;
m _ ui 64 solarterms[0]= 0ui 64;
m _ ui 64 solarterms[1]= 21208 ui 64;
m _ ui 64 solarterms[2]= 42467 ui 64;
m _ ui 64 solarterms[3]= 63836 ui 64;
m _ ui 64 solarterms[4]= 85337 ui 64;
m _ ui 64 solarterms[5]= 107014ui 64;
m _ ui 64 solarterms[6]= 128867 ui 64;
m _ ui 64 solarterms[7]= 150921ui 64;
m _ ui 64 solarterms[8]= 173149 ui 64;
m _ ui 64 solarterms[9]= 195551ui 64;
m _ ui 64 solarterms[10]= 218072 ui 64;
m _ ui 64 solarterms[11]= 240693 ui 64;
m _ ui 64 solarterms[12]= 263343 ui 64;
m _ ui 64 solarterms[13]= 285989 ui 64;
m _ ui 64 solarterms[14]= 308563 ui 64;
m _ ui 64 solarterms[15]= 331033 ui 64;
m _ ui 64 solarterms[16]= 353350 ui 64;
m _ ui 64 solarterms[17]= 375494 ui 64;
m _ ui 64 solarterms[18]= 397447 ui 64;
m _ ui 64 solarterms[19]= 419210ui 64;
m _ ui 64 solarterms[20]= 440795 ui 64;
m _ ui 64 solarterms[21]= 462224 ui 64;
m _ ui 64 solarterms[22]= 483532 ui 64;
m _ ui 64 solarterms[23]= 504758 ui 64;
/* 24节气计算*/
int _ _ fast call is leapy year(int iYear)
{
如果((iYear & amp3) != 0)
{
返回0;
}
else if (iYear % 100!= 0)
{
返回1;
}
else if (iYear % 400 == 0)
{
返回1;
}
其他
{
返回0;
}
}
int _ _ fast call TheSolarTerm(int iYear,int n)
{
无符号_ _ int 64k;
unsigned _ _ int 64 ddate _ utc = 22085493000000 ui 64;
unsigned __int64 doffdate,dadddate
doff date = m _ ui 64 solarterms[n]* 600000 ui 64;
doff date+= static _ cast & lt;unsigned _ _ int64 & gt(iYear-1900)* 315569259747 ui 64;
doff date-= ddate _ utc;
doff date/= 864000000 ui 64;//86400: 60 * 60 * 24 * 1000
int I = 1969;
dadddate = 0ui64
while(dadddate & lt;doffdate)
{
i++;
k = dadddate
dadd date+= 365 ui 64+static _ cast & lt;unsigned _ _ int64 & gt(IsLeapYear(I));
};
if(dadddate & gt;doffdate)
{
int j = 0;
dadd date = k;
while(dadddate & lt;doffdate & amp& ampj & lt12)
{
j++;
k = dadddate
dadd date+= m _ ui 64 month days[j];
if(j = = 2 & amp;& amp(IsLeapYear(我)!= 0))
{
dadd date++;
}
};
返回static _ cast & ltint & gt(道夫日期-k+1ui 64);
}
else // j = doffdate
{
返回1;
}
}
int CalConv(struct ConvDate & amp;光盘)
{
int leap,d,sm,y,im,l1,l2,acc,I,lm,KC;
如果(cd。Source == 0) /* Solar */
{
如果(cd。SolarYear & lt=第一年|| cd。SolarYear & gt去年)
{
返回1;
}
sm = cd。solar month-1;
if(sm & lt;0 | | sm & gt11)
{
return 2;
}
leap = GetLeap(cd。solar year);
d = (sm == 1)?(闰+28):solar cal[sm];
如果(cd。SolarDate & lt1 || cd。SolarDate & gtd)
{
返回3;
}
y = cd。SolarYear -第一年;
acc = SolarDays[leap][sm] + cd。SolarDate
光盘。Weekday = (acc + LunarCal[y])。base weekday)% 7;
kc = acc + LunarCal[y]。BaseKanChih
光盘。Kan = KC % 10;
光盘。chih = KC % 12;
if(ACC & lt;= LunarCal[y]。基准日)
{
y-;
光盘。LunarYear = cd。solary ear-1;
leap = GetLeap(cd。lunar year);
sm+= 12;
acc = SolarDays[leap][sm] + cd。SolarDate
}
其他
{
光盘。LunarYear = cd。SolarYear
}
l1 = LunarCal[y]。基准日;
for(I = 0;我& lt13;i++)
{
l2 = l1 + LunarCal[y]。month days[I]+29;
if(ACC & lt;= l2)
{
打破;
}
l 1 = L2;
}
光盘。lunar month = I+1;
光盘。lunar date = ACC-l 1;
im = LunarCal[y]。插层;
如果(im!= 0 & amp& amp光盘。LunarMonth & gt即时消息)
{
光盘。lunar month-;
如果(cd。LunarMonth == im)
{
光盘。lunar month =-im;
}
}
如果(cd。LunarMonth & gt12)
{
光盘。lunar month-= 12;
}
}
else /* Lunar */
{
如果(cd。LunarYear & lt第一年|| cd。LunarYear & gt=去年)
{
返回1;
}
y = cd。农历新年-第一年;
im = LunarCal[y]。插层;
lm = cd。LunarMonth
if(lm & lt;0)
{
如果(lm!= -im)
{
return 2;
}
}
else if(lm & lt;1 | | lm & gt;12)
{
return 2;
}
如果(im!= 0)
{
if(lm & gt;即时消息)
{
lm++;
}
else if (lm == -im)
{
lm = im+1;
}
}
lm-;
如果(cd。LunarDate & gtLunarCal[y]。月天数[lm] + 29)
{
返回3;
}
acc = LunarCal[y]。基准日;
for(I = 0;我& ltlm;i++)
{
acc += LunarCal[y]。month days[I]+29;
}
acc += cd。LunarDate
leap = GetLeap(cd。lunar year);
for(I = 13;我& gt= 0;我-)
{
if(ACC & gt;solar days[闰][i])
{
打破;
}
}
光盘。solar date = ACC-solar days[leap][I];
如果(我& lt= 11)
{
光盘。SolarYear = cd。LunarYear
光盘。solar month = I+1;
}
其他
{
光盘。SolarYear = cd。lunar year+1;
光盘。solar month = I-11;
}
leap = GetLeap(cd。solar year);
y = cd。SolarYear -第一年;
acc = SolarDays[leap][cd。SolarMonth - 1] + cd。SolarDate
光盘。Weekday = (acc + LunarCal[y])。base weekday)% 7;
kc = acc + LunarCal[y]。BaseKanChih
光盘。Kan = KC % 10;
光盘。chih = KC % 12;
}
返回0;
}