30.12.1899 5:40:42? это значение типа DateTime, дата 30.12.1899 это эквивалент нулевой даты, с этого значения начинается отсчет времени. При отображении дату можно просто отбросить, например если выводить значение в компонент Календарь, то можно выбрать свойство "Дата" -> "скрыть". Тогда будет отображаться только время наработки, т.е. 5:40:42. Аналогично если выводить это значение в отчет, то для ячейки можно задавать формат с отображением только времени.
Еще вопрос как получить ArchiveTimeOn за промежуток времени выбранный из календаря? Скрипт ругается на несоответствие типа данных
begin
{ вычислить время включенного состояния переменной "MyVariable" за период
от "cldBegin.AsDateTime" до "cldEnd.AsDateTime" и записать результат в переменную "MyVariableRes" }
ArchiveTimeOn(MyVariable, MyVariableRes, cldBegin.AsDateTime, cldEnd.AsDateTime);
end.
, где cldBegin и cldEnd это два календаря (они обязательно должны быть связаны каждый со своей переменной типа DateTime.
Да, время больше 24 часов потеряется. Чтобы отобразить время количество часов более 24 - нужно уходить от типа DateTime, например так:
var
aSeconds: Int64;
begin
aSeconds := SecondsBetween(MyVariable.AsDateTime, 0); // получаем количество секунд из значения переменной MyVariable
Text1.Text := SecondsToStr(aSeconds); // выводим в компонент Text1 время
end.
Функция SecondsToStr не ограничивает часы, т.е. время может быть таким: 42:18:30 (т.е. 42 часа, 18 минут, 30 секунд)
Это стандартный код, который считает всегда одинаково, он просто берёт количество секунд и представляет его как время в часах/минутах/секундах. Если время отображается как-то не так, значит в Вашей переменной какое-то неправильное значение, например с ненулевой датой (> 30.12.1899). Пример:
var
aDT: TDateTime;
aSeconds: Int64;
begin
aDT := EncodeDateTime(1899, 12, 30, 5, 40, 42, 0); // записываем в aDT время "30.12.1899 5:40:42"
aSeconds := SecondsBetween(aDT, 0); // получаем время в секундах
Text1.Text := SecondsToStr(aSeconds); // выводим время в компонент Текст
end.
в результате выполнения этого кода в компоненте Text1 всегда будет выведено значение "05:40:42".