Solved

# easy question on handling date/time

Posted on 2001-06-20
222 Views
hi!

is there any procedure/function in delphi which returns the seconds after a specific time? (e.g. how many seconds are between 01.01.1990, 12:00:00 and today?)

I need to compare to dates/time to get the result how many seconds are between two times/dates.

For example i want to know how long it is in seconds between 01.01.01 12:00:00 and 01.01.2001 12:01:38. the problem is how to handle the midnight when the date changes.

martin
0
Question by:martinpauly
[X]
###### Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

• Help others & share knowledge
• Earn cash & points

LVL 9

Expert Comment

ID: 6209723
Hi martinpauly,

use TDateTime. It  is just floating number. Ceil part - days, frac part is part of day.
0.5 - is 12 hours
0.25 - 6 hours
so you can substract two dates and it's time
D := D2 - D1;
and then convert it into seconds
SEC := Round(D*24*60*60);

----
Igor.
0

LVL 8

Expert Comment

ID: 6209747
Hello,

ITugay is right ;-)

you can use this function:

Function SecBetween(Date1,Date2:tDateTime):Integer;
begin
Result := trunc(date1-date2)*24*3600
end;

Best Regards

Cesario
0

Author Comment

ID: 6211051
hi,

the solution you wrote doesn't work. The Result of
date1 - date2 is always 0. So the multiplication with 24 and 3600 doesn't work. to set date1 and date2 i use:

date1:=strtodatetime('01.02.01 23:59:00');
date2:=strtodatetime('01.03.01 00:01:00');
(german date and time settings)

any ideas what i can do?

greetings martin
0

LVL 4

Expert Comment

ID: 6212555
Are you sure that you've declared date1 and date2 as TDateTime, not TDate? The function supplied by Cesario should work in this case.
0

LVL 3

Accepted Solution

f15iaf earned 50 total points
ID: 6212562
sect is the number of seconds beetwen 2 dates

var
date1,date2:Tdatetime;
tm,tm1:Ttimestamp;
sect:cardinal;
begin
date1:=strtodatetime('01.02.01 23:59:00');
date2:=strtodatetime('01.03.01 00:01:00');
tm:=datetimetotimestamp(date1);
tm1:=datetimetotimestamp(date2);
sect:=(tm1.Date-tm.Date)*86400+(tm1.time-tm.Time) div 1000;
end;
0

LVL 4

Expert Comment

ID: 6212573
Or:

Result := (Date2-Date1)*86400;

If you wish integer number of seconds:

Result := Round((Date2-Date1)*86400);
0

Author Comment

ID: 6214366
to stevenB: yes i'm sure i use tdatetime to declare

to  DMN: your solution doesn't work! same problem i wrote above.

to f15iaf : your right! thx a lo
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction The parallel port is a very commonly known port, it was widely used to connect a printer to the PC, if you look at the back of your computer, for those who don't have newer computers, there will be a port with 25 pins and a small print…
Creating an auto free TStringList The TStringList is a basic and frequently used object in Delphi. On many occasions, you may want to create a temporary list, process some items in the list and be done with the list. In such cases, you have to…
Come and listen to Percona CEO Peter Zaitsev discuss what’s new in Percona open source software, including Percona Server for MySQL (https://www.percona.com/software/mysql-database/percona-server) and MongoDB (https://www.percona.com/software/mongo-…
Michael from AdRem Software outlines event notifications and Automatic Corrective Actions in network monitoring. Automatic Corrective Actions are scripts, which can automatically run upon discovery of a certain undesirable condition in your network.…
###### Suggested Courses
Course of the Month6 days, 5 hours left to enroll