Can someone advise me on the best way to convert a duration formated HH:MM:SS to seconds or minutes only?
ie. 00:01:49 = 109secs
I´m using this code but not work
var
i: real;
j: integer;
begin
i := frac(real(StrToTime('00:00:01')));
j := trunc(frac(real(StrToTime('01:00:00'))) / i );
memo2.lines.add(inttostr(j));
when I try the code with 00:10:00 return 599
thanks
Using the
DateUtils
unit:Outputs:
The reason why your code is not working is that floating point values often can not be exactly represented. To avoid all implementation details about how a
TDateTime
represents the time, use the built in functions in SysUtils and DateUtils, see Date and Time Support.Use DecodeTime:
http://docwiki.embarcadero.com/Libraries/XE2/en/System.SysUtils.DecodeTime
So your code should look like this:
A function that returns the seconds should look something like this:
A very flexibel tool for handling durations is
TTimeSpan
found in unit System.TimeSpan. You can get the result in different units (second, minutes, hours, ...) and format that to your needs.