Delphi XE5中的DateTimeToString不起作用吗?

Xaw*_*cki 0 delphi delphi-xe5

我有一小段代码:

  DateTimeToString(DiffString, 't.zzz', TDT);
    ShowMessage('TDT: ' + DateTimeToStr(TDT));
    ShowMessage('DiffString: ' + DiffString);
Run Code Online (Sandbox Code Playgroud)

第一个ShowMessage的结果给出了随机好的DateTime TDT值...第二个,其中DiffString是exacly 00:00.000

任何人都可以在其他IDE中检查它吗?

Dav*_*nan 5

实际上DateTimeToString工作得很好,并且表现得与设计完全一致.它正是你所要求的.

以下是您应该提供的SSCCE:

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  DiffString: string;
  TDT: TDateTime;

begin
  TDT := Date;
  DateTimeToString(DiffString, 't.zzz', TDT);
  Writeln('TDT: ' + DateTimeToStr(TDT));
  Writeln('DiffString: ' + DiffString);
end.
Run Code Online (Sandbox Code Playgroud)

输出:

TDT: 04/02/2014
DiffString: 00:00.000

原因是,我在这里猜测,你的约会时间来自于电话Date.或者您的日期时间可能是未初始化的变量.

无论哪种方式,很明显时间部分为零.进入DiffString你的时间而不是日期.这就是t.zzz格式字符串的含义.


再次尝试使用包含非零时间的日期时间:

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  DiffString: string;
  TDT: TDateTime;

begin
  TDT := Now;
  DateTimeToString(DiffString, 't.zzz', TDT);
  Writeln('TDT: ' + DateTimeToStr(TDT));
  Writeln('DiffString: ' + DiffString);
end.
Run Code Online (Sandbox Code Playgroud)

产量

TDT: 04/02/2014 11:16:43
DiffString: 11:16.942

当然,t.zzz格式是一个糟糕的选择.它结合了短时间格式和毫秒.如您所见,在我的机器上,默认的短时间格式省略了秒.所以你得到几小时,几分钟和几毫秒.您需要重新考虑格式字符串.也许'hh:nn:ss.zzz'就是你需要的.