rolling back 24 hour times

M

marty

As part of an assignment I need to calculate a 24 hour time by subtracting a
one time from another e.g. if the user enters 1.00 as the time and 1.30 as
the time to subtract the returned time is 23.30 the previous day.

This is straightforward when dealing with positive times. But when negative
times are introduced (as above) it all gets tricky.

I'd originally thought that a lookup table of times against a corresponding
negative time might be useful. But this wouldn't be flexible enough to
handle anything later than 24 hours.

Is there a mathematical way to calculate this? I don't want the code written
for me, just a few ideas.

TIA
 
N

Nils Petter Vaskinn

Is there a mathematical way to calculate this? I don't want the code written
for me, just a few ideas.

Look at the modulo operator (%) in your textbook.
 
S

Simon Biber

marty said:
As part of an assignment I need to calculate a 24 hour time by
subtracting a one time from another e.g. if the user enters 1.00
as the time and 1.30 as the time to subtract the returned time
is 23.30 the previous day. [snip]
Is there a mathematical way to calculate this? I don't want the
code written for me, just a few ideas.

You can regard both the time and the offset as an integer number of
minutes before or after midnight, and just add the two integers.

Then normalise the result into hours and minutes (first adding 24 hours
to cancel out any negative values).

Brought to you by the numbers 60 and 1440, and the operators +, *, /
and especially %.
 
A

Al Bowers

marty said:
As part of an assignment I need to calculate a 24 hour time by subtracting a
one time from another e.g. if the user enters 1.00 as the time and 1.30 as
the time to subtract the returned time is 23.30 the previous day.

This is straightforward when dealing with positive times. But when negative
times are introduced (as above) it all gets tricky.

I'd originally thought that a lookup table of times against a corresponding
negative time might be useful. But this wouldn't be flexible enough to
handle anything later than 24 hours.

Is there a mathematical way to calculate this? I don't want the code written
for me, just a few ideas.

You might be able to substract or add to bring the values in range.

double time = 1.00; /* represents 1 am */

time-=50.50; /* substact 50.5 hours */
while(time < 24.0) time+=24.0;
while(time > 24.0) time -=24.0;
 
M

marty

Al Bowers said:
You might be able to substract or add to bring the values in range.

double time = 1.00; /* represents 1 am */

time-=50.50; /* substact 50.5 hours */
while(time < 24.0) time+=24.0;
while(time > 24.0) time -=24.0;

--
Al Bowers
Tampa, Fl USA
mailto: (e-mail address removed) (remove the x to send email)
http://www.geocities.com/abowers822/

That was very useful, thanks all.
 
E

Eric Sosman

Al said:
You might be able to substract or add to bring the values in range.

double time = 1.00; /* represents 1 am */

time-=50.50; /* substact 50.5 hours */
while(time < 24.0) time+=24.0;
while(time > 24.0) time -=24.0;

The fmod() function might be convenient here.

Also, note that simple arithmetic will not always
yield the correct result, because not all days are 24.0
hours long. Many parts of the world observe a seasonal
variation involving one 23-hour and one 25-hour day per
year, and *all* of the world (except the POSIX committee,
I've heard) admits the introduction or deletion of leap
seconds twice yearly.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,763
Messages
2,569,562
Members
45,039
Latest member
CasimiraVa

Latest Threads

Top