关于日期处理的问题(50分)

  • 主题发起人 主题发起人 13878578191
  • 开始时间 开始时间
1

13878578191

Unregistered / Unconfirmed
GUEST, unregistred user!
如何把整型的数字转化为日期,并加在已知日期上,使之成为一个新的日期!
例如:已知日期2002-7-1,已知数字2,如何得出2002-7-3?
 
....
var a:tdate;
.....
begin
a:=strtodate('2002-7-1');
a:=a+2; //a中就是你要的日期型2002-7-3
edit1.text:=datetostr(a); //将a中的2002-7-3显示在edit1中。
end;
 
date+2
IncDay(const AValue: TDateTime; const ANumberOfDays: Integer = 1): TDateTime;

Description

IncDay returns the value of the AValue parameter, incremented by ANumberOfDays days. ANumberOfDays can be negative, to return a date N days previous.

The time of day specified by the AValue parameter is copied to the result.
 
把整型的数字转化为日期用EncodeDate(year,month,day)
 
可以使用函数EncodeDate
procedure xxxx(Sender: TObject);
var
a: Tdate;
begin
a := StrToDate('2002-7-1');
a := a + EncodeDate(1,1,3) - EncodeDate(1,1,1); //此时a := 2002-7-3
end;

 
var dt:Tdate;
dt:=StrToDate('2002-7-1')+2;
 

直接将整形值,与日期型变量相加,然后
调用datetostr()函数,就可得到你想要的结果。
 
以上加答的都是错的要考虑月份进位和年进位的问题
(要考虑月大、月小、月平、闰年的问题)
由于要赶项目进度,就做此回答
 
bravercaohao的回答有道理,
不知道又该如何处理这个问题?
 
天哪~~~晕倒!!!,这些系统会自动控制的。
照我的例子,你将日期改成2002-7-30,改成2002-12-30,试一试,错了
我把脑袋给你。。。
 
日期其实就是一个浮点数,其整数部份就是从1899-12-30日以来的天数,所以你直接加上2就可以了,如果是加小时,可以直接加1/24,分可以加1/24/60.....
不过月需要用IncMonth函数.所需要用IncYear,不过在Delphi6中IncYear函数在DateUtils单元中.
 
可用SQl语句 select dateadd(day,a,b) as newdate 其中a 表示增量,b表示当前日期,
提交给Sql Server 处理,在Delphi中应fieldbyname('newdate').asdatetime 就可以取得了。
 
不管怎样,要实现你所要的功能,最好用的是IncDay这个函数。
如: NewDate := IncDay(YourDate,2);
注: NewDate、YourDate: TDateTime;
而且不用考虑润年、大、小月的问题,它都会自动的给你解决。
另外,你还可以通过使用负数获得前面的日期。
如:YourDate为'2002-7-25'
NewDate := IncDay(YourDate, -3);
则NewDate为'2002-7-22'
 
扳手 说的是对的,系统会自动去处理年、月、日的进位
bravecaohao也不试试,就妄下断语,这好象不好
不管想法多么好,自己要先实验一下才行
 
实现方法很多,但最简单的方法还是yytxt和aizb说的使用IncDay这个函数。
 
有没有搞错呀!:bravercaohao他答的有什么道理呀?系统会自动考虑这个问题的,
不用你操心,直接加就可以,真是''庸人自扰''呀
 
多人接受答案了。
 
后退
顶部