
Originally Posted by
The Mayor
I don't think it's that simple
Not quite. The:
myTime := [19, 30, 10, 0];
timeNow := [20, 25, 5, 0];
Basically means the current time is 8:25:05 PM and I want to know how far away myTime is (which is 7:30:10 PM). I'm not after the negative difference, but the time until myTime occurs again. As the current time is after myTime, the next time 7:30 PM will occur is the next day, hence the 23 hours.
ahh i see...that indeed makes it more complicated
Simba Code:
var
mytime, timeNow: array [0..3] of integer;
diff, h, m, s, msDiff: Integer;
begin
myTime := [18, 30, 15, 0];
timeNow := [19, 30, 15, 30];
diff := (myTime[0] * 3600000 + myTime[1] * 60000 + myTime[2] * 1000) - (timeNow[0] * 3600000 + timeNow[1] * 60000 + timeNow[2] * 1000);
if (diff > 0) or ((diff = 0) and (myTime[3] >= timeNow[3])) then
begin
if myTime[3] < timeNow[3] then
Dec(diff, 1000);
ConvertTime(diff, h, m, s);
end else
begin
if myTime[3] < timeNow[3] then
Dec(diff, 1000);
ConvertTime(24 * 3600000 + diff, h, m, s);
end;
if myTime[3] < timeNow[3] then
msDiff := 100 - (timeNow[3] - myTime[3])
else
msDiff := myTime[3] - timeNow[3];
writeln(toStr(h) + 'h ' + toStr(m) + 'm ' + toStr(s) + 's ' + toStr(msDiff) + 'ms');
end.
might've made some minor mistakes but the general concept should be right :)
EDIT: if u prefer a few lines shorter...cleaned up a bit:
Simba Code:
var
mytime, timeNow: array [0..3] of integer;
diff, h, m, s, msDiff: Integer;
earlier: Boolean;
begin
myTime := [18, 30, 15, 0];
timeNow := [19, 30, 15, 30];
diff := (myTime[0] * 3600000 + myTime[1] * 60000 + myTime[2] * 1000) - (timeNow[0] * 3600000 + timeNow[1] * 60000 + timeNow[2] * 1000);
earlier := (diff > 0) or ((diff = 0) and (myTime[3] >= timeNow[3]));
if myTime[3] < timeNow[3] then
Dec(diff, 1000);
if earlier then
ConvertTime(diff, h, m, s)
else
ConvertTime(24 * 3600000 + diff, h, m, s);
msDiff := myTime[3] - timeNow[3];
if msDiff < 0 then
Inc(msDiff, 100);
writeln(toStr(h) + 'h ' + toStr(m) + 'm ' + toStr(s) + 's ' + toStr(msDiff) + 'ms');
end.