DELPHI 7中关于日期格式相加的问题
有三个字段,第一个字段为QSRQ(起始日期),类型为SMALLDATETIME,第二个字段为NX(年限),类型为float,第三个字段为JZRQ(截止日期),类型为SMA...
有三个字段,第一个字段为QSRQ(起始日期),类型为SMALLDATETIME,第二个字段为NX(年限),类型为float,第三个字段为JZRQ(截止日期),类型为SMALLDATETIME,
第二个字段的类型不可以更改,可为小数,现在知道QSRQ,知道增加的NX,求出JZRQ,
NX为增加的年,NX为小数,比如2.5时,就代表增加2年半 展开
第二个字段的类型不可以更改,可为小数,现在知道QSRQ,知道增加的NX,求出JZRQ,
NX为增加的年,NX为小数,比如2.5时,就代表增加2年半 展开
1个回答
展开全部
查询出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;
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));
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询