Computing The Time Elements (hh, mm, ss)


There are slightly different procedures for computing the time elements (hh,mm,ss) depending on the starting argument and the type of time we are computing.  e.g. is it an actual time of day or a fraction of a day converted into equivalent time elements.

All times used here will be expressed in the universal standard 00h to 24h format.

There are three basic sources of fractions that will be converted into time elements.
  • If the starting argument is a general Julian Day number ((JD), to compute the time elements from its decimal part, Algorithm 2a applies.

  • If the starting argument is a time interval expressed as a fraction of a day (DayFrac), then Algorithm 2b applies.

  • If the starting argument is a time interval expressed in decimal (hours), then Algorithm 2c applies.



Algorithm 2a:

Given any general JD number, compute the time elements (hh,mm,ss) from its decimal part.  These time elements are will all equate to integer values with the seconds value (ss) rounded-off to the nearest second.

     uu = JD + 0.5
  hours = 24*(uu - floor(uu))
     hh = floor(hours)
minutes = 60*(hours - hh)
     mm = floor(minutes)
seconds = 60*(minutes - mm)
     ss = floor(seconds + 0.5)

RANDOM EXAMPLE 1:
Given:
JD = 2433582.677121548513

To find the time of day elements (hh,mm,ss) from the decimal part of any general JD number:
     JD = 2433582.677121548513
     uu = JD + 0.5 = 2433583.177121548513
  hours = 24*(uu - floor(uu)) = 4.2509171627462

     hh = floor(hours) = 04
minutes = 60*(hours - hh) = 15.055029764771
     mm = floor(minutes) = 15
seconds = 60*(minutes - mm) = 03.302
     ss = floor(seconds + 0.5) = 03
So the time of day elements, in this case, work out to:
hh:mm:ss = 04:15:03 = 04h 15m 03s
resolved to the nearest second.


Algorithm 2b:

Given a (±DayFrac) value, compute the corresponding time elements (TimeSignVal, hh, mm, ss)

 if DayFrac < 0 then TimeSignVal = -1 else TimeSignVal = 1

  hours = TimeSignVal * 24 * DayFrac
     hh = floor(hours)
minutes = 60*(hours - hh)
     mm = floor(minutes)
seconds = 60*(minutes - mm)
     ss = floor(seconds + 0.5)
or
 TimeSignVal = (DayFrac < 0)? -1:1

  hours = TimeSignVal * 24 * DayFrac
     hh = floor(hours)
minutes = 60*(hours - hh)
     mm = floor(minutes)
seconds = 60*(minutes - mm)
     ss = floor(seconds + 0.5)

RANDOM EXAMPLE 2:
Given:
DayFrac = 0.8296340055836929

To find the time elements (TimeSignVal, hh,mm,ss) corresponding to day fraction (±DayFrac):
 TimeSignVal = (DayFrac < 0)? -1:1 = 1
       hours = TimeSignVal * 24 * DayFrac = 19.911216134009
          hh = floor(hours) = 19
     minutes = 60*(hours - hh) = 54.672968040518
          mm = floor(minutes) = 54
     seconds = 60*(minutes - mm) = 40.378
          ss = floor(seconds + 0.5) = 40
So the time elements corresponding to the fraction of a day, in this case, work out to:
hh:mm:ss = 19:54:40 = 19h 54m 40s
resolved to the nearest second.


Algorithm 2c:

Given an (±hours) value, compute the corresponding time elements (TimeSignVal, hh,mm,ss).

 if hours < 0 then TimeSignVal = -1 else TimeSignVal = 1

 uu = TimeSignVal * hours
 hh = floor(uu)
 ww = 60*(uu - hh)
 mm = floor(ww)
 ss = 60*(ww - mm)
or
 TimeSignVal = (hours < 0)? -1:1

 uu = TimeSignVal * hours
 hh = floor(uu)
 ww = 60*(uu - hh)
 mm = floor(ww)
 ss = 60*(ww - mm)

RANDOM EXAMPLE 3:
Given:
hours = 18.00626265240864

To find the time elements (hh,mm,ss) corresponding to the decimal (hours) value:
 TimeSign = (18.00626265240864 < 0)? -1:1 = 1
    hours = 18.00626265240864
       hh = floor(hours) = 18
       ww = 60*(hours - hh) = 0.37575914451843
       mm = floor(ww) = 00
       ss = 60*(ww - mm) = 22.546
So the time elements, corresponding to the hours value, in this case, work out to:
hh:mm:ss = 18:00:22.546 = 18h 00m 22.546s
resolved to the nearest millisecond.


© Jay Tanner - 2025