如何解决两个数据库日期时间字段之间的格式化时差
我尝试过:
procedure TDataModule2.JournalLCalcFields(DataSet: TDataSet);
begin
JOURNAL.FieldByName('TIME').Value:= FormatDateTime('hh:mm:ss',JORNAL.FieldByName('end_date').AsDateTime - ZURNAL.FieldByName('start_date').AsDateTime);
end;
当我运行它时,它首先给了我正确的答案,但是当我对其进行测试(在sql服务器上整天更改end_date)时,结果是完全错误的。 关于为什么的任何线索 oncalculate事件失败?
时间字段是文本。
解决方法
FormatDateTime()
用于格式化特定的日期/时间值,而不是两个日期/时间值之间的持续时间。
您可以轻松编写自己的代码来格式化持续时间,例如:
uses
...,DateUtils,SysUtils;
procedure TDataModule2.JournalLCalcFields(DataSet: TDataSet);
var
duration,hours,minutes,seconds: Int64;
begin
duration := SecondsBetween(JORNAL.FieldByName('end_date').AsDateTime,ZURNAL.FieldByName('start_date').AsDateTime);
hours := duration div 3600;
duration := duration mod 3600;
minutes := duration div 60;
duration := duration mod 60;
seconds := duration;
JOURNAL.FieldByName('TIME').Value := Format('%.2d:%.2d:%.2d',[hours,seconds]);
end;
或者,您可以使用RTL的TTimeSpan
类型来帮助您,例如:
uses
...,System.TimeSpan,SysUtils;
procedure TDataModule2.JournalLCalcFields(DataSet: TDataSet);
var
ts: TTimeSpan;
begin
ts := TTimeSpan.Subtract(JORNAL.FieldByName('end_date').AsDateTime,ZURNAL.FieldByName('start_date').AsDateTime);
JOURNAL.FieldByName('TIME').Value := Format('%.2d:%.2d:%.2d',[ts.Hours,ts.Minutes,ts.Seconds]);
end;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。