wbstech
asked on
Delphi 4 : Incrementing the result of 'Now' by a negative amount of minutes
Hello.
I have the below line:
if (StrToDateTime(QueryNextRu n.FieldByN ame('repor t_lastrun' ).AsString ) > IncMinute(Now, -180)) then
Which fails to work, as I am using Delphi 4, and I guess IncMinute is in the later versions.
So my question is, how can I achieve the above in Delphi 4?
Just want to compare 2 date/time values, where the 1st comes from a SQL table (Format: dd/mm/yyyy HH:MM:SS) and the second is Now minus about 180 minutes
I have the below line:
if (StrToDateTime(QueryNextRu
Which fails to work, as I am using Delphi 4, and I guess IncMinute is in the later versions.
So my question is, how can I achieve the above in Delphi 4?
Just want to compare 2 date/time values, where the 1st comes from a SQL table (Format: dd/mm/yyyy HH:MM:SS) and the second is Now minus about 180 minutes
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
damn, too slow again ! ;-)
Btw, I found IncMinute in the DateUtil-Unit of the RxLib !
Didn't know about that function.
So, if you have RxLib installed, it is enough to include the DateUtil in your uses-clause.
Didn't know about that function.
So, if you have RxLib installed, it is enough to include the DateUtil in your uses-clause.
In this unit DateUtil.pas there is :
function IncMinute(ATime: TDateTime; Delta: Integer): TDateTime;
begin
Result := IncTime(ATime, 0, Delta, 0, 0);
end;
and of course also :
function IncTime(ATime: TDateTime; Hours, Minutes, Seconds,
MSecs: Integer): TDateTime;
begin
Result := ATime + (Hours div 24) + (((Hours mod 24) * 3600000 +
Minutes * 60000 + Seconds * 1000 + MSecs) / MSecsPerDay);
if Result < 0 then Result := Result + 1;
end;
the variable MSecsPerDay = 24 * 60 * 60 * 1000
function IncMinute(ATime: TDateTime; Delta: Integer): TDateTime;
begin
Result := IncTime(ATime, 0, Delta, 0, 0);
end;
and of course also :
function IncTime(ATime: TDateTime; Hours, Minutes, Seconds,
MSecs: Integer): TDateTime;
begin
Result := ATime + (Hours div 24) + (((Hours mod 24) * 3600000 +
Minutes * 60000 + Seconds * 1000 + MSecs) / MSecsPerDay);
if Result < 0 then Result := Result + 1;
end;
the variable MSecsPerDay = 24 * 60 * 60 * 1000
Or you can make you own IncMinute-Function Like this :
function IncMinute( ATime: TDateTime; Delta: Integer ): TDateTime;
begin
Result := aDate + ( ( ( 1 / 24 ) / 60) * Delta );
end;
function IncMinute( ATime: TDateTime; Delta: Integer ): TDateTime;
begin
Result := aDate + ( ( ( 1 / 24 ) / 60) * Delta );
end;
reference for future readers:
NOW (Windows timestamp) is a floating point numeric value with the integer value being the number of days since 1899-12-31 (yyyy-mm-dd format) and the decimal value being a percentage of the date (starting at midnight).
There fractional part of the day is usually displayed down to a one second granularity, but it is accurate down to 1/100 second.
To avoid unnecessary divisions, remember these conversion constants:
86400 - seconds in a day
1440 - minutes in a day
24 - hours in a day (duh)
========================== ========
If you need a more granular or more reliable timestamp, you would avoid NOW and use a Multi-Media timing value or a Tick timing value.
NOW (Windows timestamp) is a floating point numeric value with the integer value being the number of days since 1899-12-31 (yyyy-mm-dd format) and the decimal value being a percentage of the date (starting at midnight).
There fractional part of the day is usually displayed down to a one second granularity, but it is accurate down to 1/100 second.
To avoid unnecessary divisions, remember these conversion constants:
86400 - seconds in a day
1440 - minutes in a day
24 - hours in a day (duh)
==========================
If you need a more granular or more reliable timestamp, you would avoid NOW and use a Multi-Media timing value or a Tick timing value.
ASKER
Thanks for the massive amount of detail folks. Didn't expect all that! :-)
1 exact day = 1 (So Now + 1 = tomorrow).
So :
1 day = 1
--> 1 minute = ( 1 / 24 ) / 60 = 6,944444444444444444444444
--> 180 minutes = 6,944444444444444444444444
In a Delphi Example :
var
aDate: TDateTime;
aDate := Now;
showmessage( FormatDateTime( 'dd/mm/yyyy hh:nn:ss:zzz', aDate ) +
#13#10 +
FormatDateTime( 'dd/mm/yyyy hh:nn:ss:zzz', aDate-StrToFloat(Edit5.Tex
This shows you exactly the current date/time and current date/time minus 180 minutes.
So, instead of IncMinute(Now, -180) you can use (Now-0.125)
Best regards,
The Mayor.