0

我创建了一个编码来设置比 Windows 系统快 20 毫秒。我正在使用编码时间。

这是代码

procedure TForm1.Button1Click(Sender: TObject);
Var
delphi_datetime :tDateTime;
t_date : tdatetime ;
windows_datetime : tSystemTime;
begin
   t_date :=  dATE;
   delphi_datetime := encodetime(8,44,59,980);
   delphi_datetime := incmillisecond(delphi_datetime, 20);
   replacedate(t_date , delphi_datetime);
   datetimetosystemtime( delphi_datetime , windows_datetime );
   setlocaltime( windows_datetime );
  showmessage('time now = ' + timetostr(delphi_datetime));
end;

在我运行它之后,显示正确的时间。但日期是 1899 年 12 月 30 日.. 但我想要当前的今天日​​期,但时间快 20 毫秒。任何帮助..请...

4

2 回答 2

6

你有ReplaceDate倒退的论据。它读取第二个参数的日期并分配第一个参数的日期部分。的日期部分delphi_datetime为 0,因为这就是EncodeTime工作原理。您获取该零值并将其分配给t_date,但随后您继续使用delphi_datetime

反转 的参数ReplaceDate,您应该会看到当前系统时间设置为 8:45:00.000 和当前日期。

ReplaceDate(delphi_datetime, t_date);

如果您没有使用单独的t_date变量,您可能会更早注意到这个错误。如果您Date直接调用,您的代码将无法编译:

ReplaceDate(Date, delphi_datetime); // can't pass function result as "var" parameter

这有效:

ReplaceDate(delphi_datetime, Date);
于 2013-01-25T15:22:55.823 回答
4

Rob 发现了您现有代码的问题。但是,您现有的方法是不必要的复杂。如果您选择更简单的方法,您会发现更容易正确编写代码。

如果您想要一个比现在大 20 毫秒的日期时间,请执行以下操作:

MyDateTime := IncMillisecond(Now, 20);

如果你想要一个代表今天 0845 的日期时间,那么你写:

MyDateTime := Date + EncodeTime(8, 45, 0, 0);
于 2013-01-25T16:55:55.570 回答