Solved

# Delphi 4 : Incrementing the result of 'Now' by a negative amount of minutes

Posted on 2006-11-30
669 Views
Hello.

I have the below line:

if (StrToDateTime(QueryNextRun.FieldByName('report_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
0
Question by:wbstech

LVL 27

Accepted Solution

kretzschmar earned 500 total points
ID: 18044590
use now - 180/1440

meikl ;-)
0

LVL 6

Expert Comment

ID: 18044624
When calculating with date/time, you have the following rule :
1 exact day = 1 (So Now + 1 = tomorrow).

So :
1 day = 1
--> 1 minute = ( 1 / 24 ) / 60 = 6,9444444444444444444444444444444e-4
--> 180 minutes = 6,9444444444444444444444444444444e-4 * 180 = 0,125

In a Delphi Example :

var

showmessage( FormatDateTime( 'dd/mm/yyyy hh:nn:ss:zzz', aDate ) +
#13#10 +
FormatDateTime( 'dd/mm/yyyy hh:nn:ss:zzz', aDate-StrToFloat(Edit5.Text) ) );

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.
0

LVL 6

Expert Comment

ID: 18044639
damn, too slow again ! ;-)
0

LVL 6

Expert Comment

ID: 18044649
Btw, I found IncMinute in the DateUtil-Unit of the RxLib !

So, if you have RxLib installed, it is enough to include the DateUtil in your uses-clause.
0

LVL 6

Expert Comment

ID: 18044687
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
0

LVL 6

Expert Comment

ID: 18044761
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;
0

LVL 45

Expert Comment

ID: 18044851
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.
0

LVL 4

Author Comment

ID: 18053589
Thanks for the massive amount of detail folks. Didn't expect all that! :-)
0

## Featured Post

A lot of questions regard threads in Delphi.   One of the more specific questions is how to show progress of the thread.   Updating a progressbar from inside a thread is a mistake. A solution to this would be to send a synchronized message to the…
Objective: - This article will help user in how to convert their numeric value become words. How to use 1. You can copy this code in your Unit as function 2. than you can perform your function by type this code The Code   (CODE) The Im…
Internet Business Fax to Email Made Easy - With eFax Corporate (http://www.enterprise.efax.com), you'll receive a dedicated online fax number, which is used the same way as a typical analog fax number. You'll receive secure faxes in your email, fr…
Access reports are powerful and flexible. Learn how to create a query and then a grouped report using the wizard. Modify the report design after the wizard is done to make it look better. There will be another video to explain how to put the final p…