Фактически 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'
- это то, что вам нужно.
Случайная память/неинициализированная переменная не является случайным значением DateTime. Получите правильную DateTime откуда-нибудь и протестируйте ее. –