Рассмотрим задачу вычисления разницы между двумя переменными типа TDateTime в Delphi в формате hh:mm:ss. Пользователь имеет две переменные:
s := StrToDateTime('03/03/2017 10:10:12');
e := StrToDateTime('04/04/2017 10:10:12');
и ему необходимо узнать разницу между ними. Функции типа ...Between() в данном случае не помогают, и требуется написать собственный код для решения этой задачи.
Решение с использованием DateUtils.SecondsBetween
Для начала, можно использовать функцию DateUtils.SecondsBetween, которая возвращает разницу между двумя датами в секундах. Вот пример функции, которая вычисляет разницу в формате hh:mm:ss:
uses
DateUtils, SysUtils;
function TimeDiffStr(const s1, s2: String): String;
var
t1, t2: TDateTime;
secs: Int64;
begin
t1 := StrToDateTime(s1);
t2 := StrToDateTime(s2);
secs := SecondsBetween(t1, t2);
Result := Format('%2.2d:%2.2d:%2.2d', [secs div SecsPerHour, (secs div SecsPerMin) mod SecsPerMin, secs mod SecsPerMin]);
end;
begin
WriteLn(TimeDiffStr('03/03/2017 10:10:12', '04/04/2017 10:10:12'));
ReadLn;
end.
Альтернативное решение с использованием TTimeSpan
Также можно воспользоваться классом TTimeSpan из модуля System.TimeSpan, который позволяет работать с временными интервалами:
program Project1;
{$APPTYPE CONSOLE}
uses
System.SysUtils, System.TimeSpan;
var
StartDate, EndDate: TDateTime;
TS: TTimeSpan;
Temp: string;
begin
StartDate := StrToDateTime('03/03/2017 10:10:12');
EndDate := StrToDateTime('04/04/2017 10:10:12');
TS := TTimeSpan.Subtract(EndDate, StartDate);
Temp := TS.ToString;
WriteLn(Temp); // Выводит разницу в формате дней, часов, минут и секунд
WriteLn(Format('%.2d:%.2d:%.2d', [TS.Days * 24 + TS.Hours, TS.Minutes, TS.Seconds]));
ReadLn;
end.
Обратите внимание, что в коде выше использование строк с датами и временем затрудняет локализацию и является избыточным. Лучше использовать функции SysUtils.EncodeDate, SysUtils.EncodeTime, или DateUtils.EncodeDateTime для работы с датами и временем.
Вывод
В данной статье были рассмотрены два метода вычисления разницы между двумя датами в формате TDateTime в Delphi: использование функции DateUtils.SecondsBetween и класса TTimeSpan. Оба подхода позволяют получить желаемый результат и могут быть использованы в зависимости от конкретных требований проекта.
Вычисление разницы между двумя датами в формате `TDateTime` в языке программирования Delphi с использованием двух методов: функции `DateUtils.SecondsBetween` и класса `TTimeSpan`.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.