ganjun3000:网上找的c++源码,转换为EF。
完整源码请到论坛下载:http://bbs.dywt.com.cn/dispbbs.asp?boardID=148&ID=147498&page=1
以下是部分核心代码:
公开 类 万年历
{
// ====================================================================
公开 静态 整数 取农历年天数(整数 农历年份) // 取某农历年份的总天数
{
整数 i, sum = 348 ;
for (i = 0x8000 ; i > 0x8 ; i >>= 1 )
{
sum += 选择(农历信息[农历年份 - 1900 ] & i, 1 , 0 );
}
返回(sum + 取农历闰月天数(农历年份));
}
// ====================================================================
公开 静态 整数 取农历闰月天数(整数 农历年份) // 取某农历年份闰月的天数
{
if (取农历闰月(农历年份) != 0 )
返回 选择(农历信息[农历年份 - 1900 ] & 0x10000 , 30 , 29 );
else
返回 0 ;
}
// ====================================================================
公开 静态 整数 取农历闰月(整数 农历年份) // 取某农历年份闰哪个月 1-12 , 没闰传回 0
{
返回 农历信息[农历年份 - 1900 ] & 0xf ;
}
// ====================================================================
公开 静态 整数 取农历月天数(整数 农历年份,整数 农历月份) // 取某农历年份的某月的总天数
{
返回 选择( 农历信息[农历年份 - 1900 ] & ( 0x10000 >> 农历月份), 30 , 29 );
}
// ====================================================================
公开 静态 日期 取农历日期(日期 公历日期) // 把公历日期转换为农历日期
{
整数 offset;
整数 i, leap = 0 , temp = 0 ;
日期 返回日期 = new 日期();
offset = 取相差天数(公历日期) - 30 ;
for (i = 1900 ; i < 2050 && offset > 0 ; i ++ )
{
temp = 取农历年天数(i);
offset -= temp;
}
if (offset < 0 )
{
offset += temp;
i -- ;
}
返回日期.年 = i;
leap = 取农历闰月(i);
bool isLeap = 假;
for (i = 1 ; i < 13 && offset > 0 ; i ++ )
{
if (leap > 0 && i == (leap + 1 ) && isLeap == 假)
{
i -- ;
isLeap = 真;
temp = 取农历闰月天数(返回日期.年);
}
else
{
temp = 取农历月天数(返回日期.年, i);
}
if (isLeap == 真 && i == (leap + 1 ))
{
isLeap = 假;
}
offset -= temp;
}
if (offset == 0 && leap > 0 &&
{
// ====================================================================
公开 静态 整数 取农历年天数(整数 农历年份) // 取某农历年份的总天数
{
整数 i, sum = 348 ;
for (i = 0x8000 ; i > 0x8 ; i >>= 1 )
{
sum += 选择(农历信息[农历年份 - 1900 ] & i, 1 , 0 );
}
返回(sum + 取农历闰月天数(农历年份));
}
// ====================================================================
公开 静态 整数 取农历闰月天数(整数 农历年份) // 取某农历年份闰月的天数
{
if (取农历闰月(农历年份) != 0 )
返回 选择(农历信息[农历年份 - 1900 ] & 0x10000 , 30 , 29 );
else
返回 0 ;
}
// ====================================================================
公开 静态 整数 取农历闰月(整数 农历年份) // 取某农历年份闰哪个月 1-12 , 没闰传回 0
{
返回 农历信息[农历年份 - 1900 ] & 0xf ;
}
// ====================================================================
公开 静态 整数 取农历月天数(整数 农历年份,整数 农历月份) // 取某农历年份的某月的总天数
{
返回 选择( 农历信息[农历年份 - 1900 ] & ( 0x10000 >> 农历月份), 30 , 29 );
}
// ====================================================================
公开 静态 日期 取农历日期(日期 公历日期) // 把公历日期转换为农历日期
{
整数 offset;
整数 i, leap = 0 , temp = 0 ;
日期 返回日期 = new 日期();
offset = 取相差天数(公历日期) - 30 ;
for (i = 1900 ; i < 2050 && offset > 0 ; i ++ )
{
temp = 取农历年天数(i);
offset -= temp;
}
if (offset < 0 )
{
offset += temp;
i -- ;
}
返回日期.年 = i;
leap = 取农历闰月(i);
bool isLeap = 假;
for (i = 1 ; i < 13 && offset > 0 ; i ++ )
{
if (leap > 0 && i == (leap + 1 ) && isLeap == 假)
{
i -- ;
isLeap = 真;
temp = 取农历闰月天数(返回日期.年);
}
else
{
temp = 取农历月天数(返回日期.年, i);
}
if (isLeap == 真 && i == (leap + 1 ))
{
isLeap = 假;
}
offset -= temp;
}
if (offset == 0 && leap > 0 &&