DELPHI 7中关于日期格式相加的问题

有三个字段,第一个字段为QSRQ(起始日期),类型为SMALLDATETIME,第二个字段为NX(年限),类型为float,第三个字段为JZRQ(截止日期),类型为SMA... 有三个字段,第一个字段为QSRQ(起始日期),类型为SMALLDATETIME,第二个字段为NX(年限),类型为float,第三个字段为JZRQ(截止日期),类型为SMALLDATETIME,
第二个字段的类型不可以更改,可为小数,现在知道QSRQ,知道增加的NX,求出JZRQ,
NX为增加的年,NX为小数,比如2.5时,就代表增加2年半
展开
 我来答
sirouszlh
2014-05-28 · TA获得超过1651个赞
知道小有建树答主
回答量:1038
采纳率:100%
帮助的人:642万
展开全部
查询出QSRQ

function IsLeapYear(nYear: Integer): Boolean;//判断是否是闰年 平年是365天,闰年是366天

begin
Result := (nYear mod 4 = 0) and ((nYear mod 100 <> 0) or (nYear mod 400 = 0));
end;

var
qs:TdateTime;
nx:double;
i:integer;
y,y1,k, m, d: WORD;
JZRQ:TdateTime;
begin
qs:=adoquery.fieldByName('QSRQ').asdatetime;
nx:=adoquery.fieldByName('nx').asinteger;
DecodeDate(qs, y, m, d); //得到Y数 也就是年

JZRQ:=qs+Round(nx*365); //每年365天 就加上日期 这个计算有小数点 如何取整你得自己选择 我就随便用round了
DecodeDate(JZRQ, y1, m, d); 得到新的年份
k:=0;
for i:=y to y1-1 do //计算以往几个年份闰年 的个数 但不包括 JZRQ这个年份
begin
if IsLeapYear(i) then
inc(k);
end;
JZRQ:=JZRQ+k;
DecodeDate(JZRQ, y1, m, d); 得到新的年份
if m>2 then //如果月份超过3月 就得判断本年是否是闰年
begin
if IsLeapYear(y1) then //如果是闰年 这个2月有29日 就多加1天
JZRQ:=JZRQ+1;

end;

showmessage(dateTimetostr(JZRQ));

end;
更多追问追答
追问
现在不管是平年还是闰年,不管天数了,只在年的基础上加上int类型的数字,就像现在是2014-05-28,加上4年就是2018-05-27或者是2018年05-28该怎么写,
最好把两个结果都写下来。提前谢谢了
追答
一样的 
不管闰年就是
qs:=now;
nx:=4;
JZRQ:=qs+Round(nx*365);
showmessage(dateTimetostr(JZRQ));
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式