Next / Previous / Contents / Shipman's homepage

9. class JulianDate: Julian date and time

The Julian date is the most common way of expressing the time at which an astronomical event occurs. It is independent of the time zone. It is defined as the number of days since noon on January 1, 4713 BC at the Greenwich meridian. Current Julian dates have seven digits to the left of the decimal point: for example, noon on January 1, 2000 is Julian date 2,451,545.0.

Your Python program can handle a JulianDate instance as if it were an ordinary floating point number. However, since IEEE float values are good only to about 15 digits of precision, this means that the precision of times of day is on the order of 1×10-8 days, or in the neighborhood of a millisecond.

Assuming that modern astronomy is more important than historical research, we can buy a bit more precision by storing internally the Julian date minus 2,200,000, which gives us at least 9 or 10 digits after the decimal, or a precision of roughly 10 microseconds.

Through the magic of Python classes, though, converting a JulianDate instance into a Python float will restore the bias, giving current exact values. However, subtraction of two JulianDate values will cause less of a problem with loss of significance than subtracting two float values converted from JulianDate instances.

Here is the class interface.

9.1. JulianDate.__init__(): Constructor

JulianDate(j, f=0.0)

The Julian date as a float or int.


If you would like to work with greater precision, pass the integral part of the Julian date in as j and the fractional part as f. The bias (JULIAN_BIAS) will be removed from j before f is added, giving you extended precision.

Instance attribute .j contains the biased value, that is, j+f-JULIAN_BIAS.