我有一小段代码:
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中检查它吗?
实际上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'就是你需要的.