I am trying to understand the relationship (quantitatively) between JulianDate, UTC, and the epoch of Two Line Elements. It's a deep subject, especially if you include relativity, and a long subject - there is a lot of history. But here what I need is just a bare-bones understanding of how these three things are related quantitatively, on earth, plus/minus a few years from now, to milli-second accuracy.

I roughly understand that UTC increase by 1 second every second, with the usual rules for hours, minutes, days, years, leap years and leap seconds.

I don't understand JulianDate. That links to a long article which states many facts, but after reading, I still don't understand what it is quantitatively. If I line up UTC agains Julian Day are they parallel (except for UTC's leap years/seconds)? Is there a mapping that I can understand or do I have to use a computer program or web site or some other black box to convert between the two?

Here are two examples of situations where I feel lost. I print additional information to make sure I understand some things - the questions are in bold:

Example 1 - time on my computer and in Skyfield:

from skyfield.api import now, JulianDate, load
import time
def test():
    a, b =  now(), time.gmtime()   # check the times
    print a.tt_tuple()
    print time.asctime(b)

(2016.0, 1.0, 31.0, 11, 45, 28.927114605903625)
Sun Jan 31 11:44:20 2016

Both of those are derived from my computer's system time (I think!) which is up-to-date. There is a difference of about 69 seconds. What is that?

Example 2 TLE epoch:

from skyfield.api import now, JulianDate, load
import math

data = load('de421.bsp')
earth = data['earth']

TLE = """
1 25544U 98067A   16031.25992506  .00006019  00000-0  97324-4 0  9994
2 25544  51.6430  25.8646 0006733  62.5910  66.7566 15.54344726983528

ISS = earth.satellite(TLE)

print ISS._sgp4_satellite.satnum, "  NORAD satellite number of ISS in the TLE"
print ISS._sgp4_satellite.epoch,  "  The epoch of the TLE"

frac = 0.25992506                 #  fraction of day in the epoch of the TLE"

print round((((frac*24.-6.)*60.-14.)*60.-17.)*1E+06), "  the microseconds of the epoch"

print ISS._sgp4_satellite.mo*(180./math.pi),    "  TLE Mean Anomaly - of ISS *at* epoch?"

print JulianDate(utc=(2016, 1, 31, 6, 14, 17.525184)).tt,  "  What is this number??"


25544   NORAD satellite number of ISS in the TLE
2016-01-31 06:14:17.525184   The epoch of the TLE
525184.0   the microseconds of the epoch
66.7566   TLE Mean Anomaly - of ISS *at* epoch?
2457418.76071   What is this number??

What is the exact meaning of the last number, and how can I convert the value of this epoch to UTC (if I wanted to)?


2 Answers 2


JulianDate basically counts the number of days since Jan 1, 4713 BC 12:00 UTC in the Julian calendar. However, that is a bit hard to understand since it is so long ago, uses a different calendar, and you must take the transition form BC to AD into account.

So we use Reduced JulianDate, which is another official standard, related by $\text{Reduced JD} = \text{JD} - 2400000$. This counts the number of days since Nov 16, 1858 12:00 TT (Terrestrial Time) in the (usual) Gregorian calendar.

Then we may add 45.5 days to reach Jan 1, 1859 00:00 UTC. We can add 51499 more days to reach Jan 1, 2000 00:00 (Terrestrial Time), the beginning of a new 400-years cycle.

We may now compute:

$$\text{JD} = 2451544.5 + 365Y + \lfloor 0.25Y \rfloor - \lfloor 0.01Y \rfloor + \lfloor 0.0025Y \rfloor +A \\ +D + \tfrac1{24}H+ \tfrac1{1440}M + \tfrac1{86400}S$$


  • $Y$ is the current Gregorian year minus 2000
  • $\lfloor x \rfloor$ is the floor function, the largest integer smaller than $x$.
  • $D$ gives the current day number. This is 1 on Jan 1, 32 on Feb 1, etc.
  • $H$ is the current hour in Terrestrial Time.
  • $M$ is the current minute in Terrestrial Time.
  • $S$ is the current second in Terrestrial Time, including milliseconds, etc.
  • $A$ is a correction factor. If the year is a leap year, it is -1, otherwise it is zero.

This is just a formula that works. There are many other formulas that would work, but I picked this one because it was the easiest to explain.

The difference of 69 seconds is caused by the difference between Terrestrial Time and UTC, currently 68.184 seconds. This is because a diffence of 36 seconds in leap seconds and a historical offset of 32.184 seconds.

  • 1
    $\begingroup$ Hmm... give me a little time to digest this. So does JD always smoothly and continuously increase by 1/86400 every second? I'm looking at what appears to be the coefficient in front of Y (365.2425) and the number of days between say Jan 1 00:00:00 of any year and the next which should be 365 or 366 whole days (except leap seconds), and I don't see how it can be smooth. $\endgroup$
    – uhoh
    Commented Jan 31, 2016 at 15:25
  • 1
    $\begingroup$ @uhoh Please note the floor brackets around the parts with Y. (The floor function is the biggest integer smaller than the input). Yes, JD always smoothly and continuously increase by 1/86400 every second, excepted for leap seconds, which do exist in UTC but not in TT. $\endgroup$
    – wythagoras
    Commented Jan 31, 2016 at 15:28
  • $\begingroup$ OK it might be good to add that the square brackets [] mean floor() up in the answer as well. Now I can understand that - for example - [0.01Y] is there to compensate for the missing Feb-29th every year that ends in '00 $\endgroup$
    – uhoh
    Commented Jan 31, 2016 at 15:46
  • 1
    $\begingroup$ @uhoh That is correct. I added it to the answer. $\endgroup$
    – wythagoras
    Commented Jan 31, 2016 at 15:48
  • $\begingroup$ The second part about satellite Two Line Element epoch - I think it is Julian Day but I am not sure. If you can add a little about that I can mark this as answered (I'll be off line now, will return in 0.5D) This is great help, thanks!!! $\endgroup$
    – uhoh
    Commented Jan 31, 2016 at 15:54

I often have to go read the Skyfield guide to dates and times to keep everything straight, but, briefly:

  • A Julian Date is simply a rival way to name moments, that is simpler than our customary date-plus-time system. Normally, to specify a date and time requires six different numbers — year, month, day, hour, minute, and seconds — and comparing two dates takes a terrible amount of math, where you find yourself borrowing 31 days from some months but 30 from others, and having to carry the leap day in your head if you want the math to work out. Not so with Julian Dates: they simply assign a simple floating-point number to each date-plus-time on our calendar, and are much easier to do math with.

  • The question of whether you like date-and-time names for moments, or instead love Julian Date numbers for moments, is entirely separate from the question of time scales — the question, given a given moment, of “what time is it”? Whether you use the name “2457418.5” or the name “2016 January 31 00:00:00.0” (the two are exactly equivalent) for a given moment, that still leaves the question “but how do we agree on when that moment was?”

  • A time scale is a system for assigning names to moments in time. UT1, UTC, TAI, TT, and TDB all have a different answer for, “What is the best name for RIGHT NOW?” Whether you express TT as a Julian Date because you like big numbers that make math easy, or as a date-plus-time because the big numbers don't mean much to you, you are simply expressing in two different ways the answer to the question “What does TT call this particular moment?”

You might wonder why we would have so many different names (because there are actually several more beyond the basic five I named above) for the exactly same moment. Briefly:

UT1 — because we wonder where the Sun and stars are above our heads.

UTC — because we want our beside clocks to kind-of be synchronized with sunrise and sunset, but it's hard to explain to everyone's watches that seconds need to speed up and slow down to track the sun, so instead let's keep seconds a constant length and add a leap second when we start to fall behind.

TAI — just forget about the sun. Atomic clocks need seconds that march straight ahead with no leap calculations ever.

TT — great idea, TAI people! Only, astronomers already had that idea, years ago, and had already started doing calculations against an imaginary clock that didn't slow up with the Earth's slowing rotation, so it's best that they maintain a timescale parallel with TAI but that stays 30+ seconds different so they don't have to rewrite all their math and tables.

TDB — but if you are interested in the celestial clockwork of the Solar System, all those other clocks are useless! Because any Earth based clock will speed up and slow down as the Earth accelerates and decelerates each year, because: relativity. If you are going to study planet motions, you have to use an imaginary clock that is stationary at the middle of the Solar System, not the crazy Mickey Mouse clocks we carry on Earth that accelerate BOTH with our orbital revolution AND with our daily rotation.

Again, refer to the Skyfield documentation linked above, and to the USNO circular 179 for a more technical write-up of these concepts.

  • $\begingroup$ Thanks! This is very helpful and of course so is the page in the skyfield documentation. But right now I just want to focus on using the numbers correctly, and not necessarily understanding the bigger picture. Of course I want to, but first things first. I've broken out the TLE question separately. $\endgroup$
    – uhoh
    Commented Feb 1, 2016 at 1:28

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.