网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > VC++ > 正文
公历农历相互转换的算法及其VCL实现
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/15
下载{$ArticleTitle}原创论文样式


先减去29天如果月大,则对应的信息位为1,

又减去一天*/

total=total-29-GetBit(ChineseCalendarData[m],n);

}

if(isEnd)break; //如果不够减,退出外层循环

}

FcYear=1921 + m; //农历年=起始年份+下标

FcMonth=k-n+1; //农历月=本年的月份数(k+1)减去已经减去的月份数(n)

FcDay=total; //农历日=剩余天数

unsigned short int t1,t2,t3,t4;

TheDate.DecodeTime(&t1,&t2,&t3,&t4);

FcTime=(t1+1)>>1;             //农历时

        if(k==12)              //如果本年有闰月

        {

                if(FcMonth==ChineseCalendarData[m]/0x10000+1)//就是闰月

                        FcMonth=1-FcMonth;

                if(FcMonth>ChineseCalendarData[m]/0x10000+1)//闰月后面

                        FcMonth--;

        }

}

//----------------------------------------------------------------------------

二、农历到公历的转换

这个算法比较简单,只要计算所求时候到起始年正月初一的总天数就可以了,要计算总天数,只要统计出本月以前的大月小月书就可以了,然后把这个值赋予TdateTime类型的TheDate就可以用TdateTime的成员函数DecodeDate得到公历的年月日了。具体代码如下:

//----------------------------------------------------------------------------

void __fastcall ThsDivineCalendar::c2e()

{

    int i,k,m,p,y={0,0};

       //y[0]:小月、y:大月

    //本年以前的大月小月数

    for(i=0;i<FcYear-1921;i++)

{

k=(ChineseCalendarData[i]<0xfff)?11:12;

for(m=0;m<=k;m++)

y[GetBit(ChineseCalendarData[i],m)]++;

}

//统计本年本月以前的大月小月数

//本年不是闰年

if(ChineseCalendarData[i]<0xfff)

for(m=13-FcMonth;m<=11;m++)

y[GetBit(ChineseCalendarData[i],m)]++;

else // 是闰年

{

k=ChineseCalendarData[i]/0x10000;

//根据在闰月前后决定统计的起始位置

p=(FcMonth>k)?13-FcMonth:14-FcMonth;

        if(k+FcMonth==0)p=13+FcMonth;     //本月就是闰月

        for(m=p;m<=12;m++)

y[GetBit(ChineseCalendarData[i],m)]++;

}

//7709就是1920年腊月三十

TheDate=7709+y[0]*29+y*30+FcDay+FcTime*2.0/24;

}

//----------------------------------------------------------------------------

void __fastcall ThsDivineCalendar::GetYMD()

{

unsigned short y,m,d,t;

TheDate.DecodeDate(&y,&m,&d);

FYear=y;

FMonth=m;

FDay=d;

TheDate.DecodeTime(&t,&y,&m,&d);

FTime=

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号