Delphi XE5中的DateTimeToString不起作用吗?

时间:2014-02-04 10:59:41

标签: delphi delphi-xe5

我有一小段代码:

  DateTimeToString(DiffString, 't.zzz', TDT);
    ShowMessage('TDT: ' + DateTimeToStr(TDT));
    ShowMessage('DiffString: ' + DiffString);

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

有人可以在其他IDE中查看吗?

1 个答案:

答案 0 :(得分: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.

<强>输出:

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.

<强>输出

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

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