2014-02-04 1 views
0

У меня есть небольшой фрагмент кода:Is DateTimeToString в Delphi XE5 не работает?

результате которого с первого ShowMessage дает случайное значение DateTime хороший ТДТ ... второй, где DiffString является exacly 00: 00,000

Может кто-нибудь проверить его в другой IDE ?

+0

Случайная память/неинициализированная переменная не является случайным значением DateTime. Получите правильную DateTime откуда-нибудь и протестируйте ее. –

ответ

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' - это то, что вам нужно.

+0

Я всегда рекомендую: ISO8601 время '' yyyy-mm-dd "T" hh: nn: ss, zzzzzz "Z" ''либо в UTC + 0, либо используя' TimeZoneBias' – Sebastian

+0

Спасибо, решение работает отлично –