怎样知道两个时间相隔多少天?(20分)

  • 主题发起人 主题发起人 black-eyes
  • 开始时间 开始时间
trunc(date1-date2)
 
date2-date1 date1,2 为日期型
 
Date2-Date1得出的是一个浮点型数值,日期时间在Delphi里本来就是用浮点型数据表示。
如果Date2-Date1等于1.5,就表示Date2比Date1大1.5天也就是一天零12个小时。
 
在Delphi中用
uses DateUtils;
...
DaysBetween(Date1,Date2);//相隔多少天?
HoursBetween(Date1,Date2);//相隔多少小时
MonthsBetween(Date1,Date2);
YearsBetween(Date1,Date2);
 
用rainxy2002这位仁兄的方法
 
rainxy2002老兄已经答了,凑个热闹。
 
其实在日期时间是一个浮点数,用两个日期控件设定两个日期时间,相减即可。
 
两个日期相减即可。
然后再将结果取整。
 
好象没有 Datetils这个单元文件。
 
//好象没有 Datetils这个单元文件。
是 DateUtils :) 我的 D6 有。
 
trunc(date1-date2)
 
直接相減也可,但要轉幾次數據類型
 
unit DTCalc;

interface

uses
{$IFDEF Win32} Windows, {$ELSE} WinTypes, WinProcs, {$ENDIF}
SysUtils, Classes;

type
TDTCalc = class(TComponent)
private
FStartTime, FEndTime: TDateTime;
FYears, FMonths, FDays, FHours, FMinutes, FSeconds, FMSeconds: LongInt;
procedure SetStartTime(Value: TDateTime);
procedure SetEndTime(Value: TDateTime);
procedure Calculate;
procedure SetNone(Value: LongInt);
public
property Years: LongInt read FYears;
property Months: LongInt read FMonths;
property Days: LongInt read FDays;
property Hours: LongInt read FHours;
property Minutes: LongInt read FMinutes;
property Seconds: LongInt read FSeconds;
property MSeconds: LongInt read FMSeconds;
published
property StartTime: TDateTime read FStartTime write SetStartTime;
property EndTime: TDateTime read FEndTime write SetEndTime;
end;

procedure Register;

implementation

procedure TDTCalc.SetStartTime(Value: TDateTime);
begin
FStartTime := Value;
Calculate;
end;

procedure TDTCalc.SetEndTime(Value: TDateTime);
begin
FEndTime := Value;
Calculate;
end;

procedure TDTCalc.Calculate;
var
e: Extended;

procedure Truncate(var Value: LongInt);
begin
try
Value := Trunc(e);
except
Value := -1;
end;
end;

begin
e := MSecsPerDay * (FEndTime - FStartTime);
Truncate(FMSeconds);
e := e / 1000;
Truncate(FSeconds);
e := e / 60;
Truncate(FMinutes);
e := e / 60;
Truncate(FHours);
e := e / 24;
Truncate(FDays);
FMonths := Trunc((FEndTime - FStartTime) / 30.4375);
FYears := Trunc((FEndTime - FStartTime) / 365.25);
end;

procedure TDTCalc.SetNone
begin {} end;

procedure Register;
begin
RegisterComponents('Xacker', [TDTCalc]);
end;

end.
 
多人接受答案了。
 
后退
顶部