我在Delphi中使用FastReport。我有以下字段:
DATE_FROM (example: 01.05.2015.)
TIME_FROM (example: 13:00)
DATE_TO (example: 02.05.2015.)
TIME_TO (example: 10:00)
我需要计算这些日期之间经过了多少天和几小时。在这个例子中,它不到24小时......所以结果应该是:
0 days 21 hours
如何实现?
答案 0 :(得分:-1)
我会安装TurboPower Orpheus。在您的uses语句中包含OvcDate单元。这个例子是用柏林10.1架构师制作的,并且合理向下兼容。 Orpheus有很多版本。
procedure TForm2.SpeedButton1Click(Sender: TObject);
var
date1 : TDateTime;
date2 : TDateTime;
rdt1 : TStDateTimeRec;
rdt2 : TStDateTimeRec;
days : Integer;
seconds : Integer;
hrs : Integer;
min : Integer;
sec : Integer;
begin
date1 := StrToDateTime('01/05/2015 13:00');
date2 := StrToDateTime('02/05/2015 10:00');
rdt1.D := DateTimeToStDate(date1);
rdt2.D := DateTimeToStDate(date2);
rdt1.T := DateTimeToStTime(date1);
rdt2.T := DateTimeToStTime(date2);
DateTimeDiff(rdt1, rdt2, days, seconds);
hrs := seconds div SecondsInHour;
min := ((seconds - (hrs * SecondsInHour)) div SecondsInMinute);
sec := (seconds - (hrs * SecondsInHour) + (min * SecondsInMinute));
sec := sec;
// days = 30
// seconds = 75600
// hrs = 21
// min = 0
// sec = 0
end;
以上示例建立了概念证明并显示了计算的工作原理。您的输入是相关日期的1.5.2015和2.5.2015,这就是我使用的。
我会设置适当的计算字段并将此公式放在OnCalc事件中。确保建立一个机制来设置start和stop datetime字段。让DBMS完成剩下的工作。我恰好是最受欢迎的德尔福作家之一。 http://cc.embarcadero.com/PopularAuthors.aspx