Computing siderial time
Here is a small Python program to calculate the Julian date and sidereal time. Written for Python 3.4 on MacOS, but should also work on other operating systems and Python versions.
my_astrolib.py
def julian_date(year, month, day, utc=0):
"""
Returns the Julian date, number of days since 1 January 4713 BC 12:00.
utc is UTC in decimal hours. If utc=0, returns the date at 12:00 UTC.
"""
if month > 2:
y = year
m = month
else:
y = year - 1
m = month + 12
d = day
h = utc/24
if year <= 1582 and month <= 10 and day <= 4:
# Julian calendar
b = 0
elif year == 1582 and month == 10 and day > 4 and day < 15:
# Gregorian calendar reform: 10 days (5 to 14 October 1582) were skipped.
# In 1582 after 4 October follows the 15 October.
d = 15
b = -10
else:
# Gregorian Calendar
a = int(y/100)
b = 2 - a + int(a/4)
jd = int(365.25*(y+4716)) + int(30.6001*(m+1)) + d + h + b - 1524.5
return(jd)
def siderial_time(year, month, day, utc=0, long=0):
"""
Returns the siderial time in decimal hours. Longitude (long) is in
decimal degrees. If long=0, return value is Greenwich Mean Siderial Time
(GMST).
"""
jd = julian_date(year, month, day)
t = (jd - 2451545.0)/36525
# Greenwich siderial time at 0h UTC (hours)
st = (24110.54841 + 8640184.812866 * t +
0.093104 * t**2 - 0.0000062 * t**3) / 3600
# Greenwich siderial time at given UTC
st = st + 1.00273790935*utc
# Local siderial time at given UTC (longitude in degrees)
st = st + long/15
st = st % 24
return(st)
siderial_time.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from datetime import datetime, date, time, tzinfo
from my_astrolib import julian_date,siderial_time
def main():
now = datetime.utcnow()
year = now.year
month = now.month
day = now.day
utc = now.hour + now.minute/60 + now.second/3600
long = 8.5
jd = julian_date(year, month, day)
jd_utc = julian_date(year, month, day, utc)
gmst = siderial_time(year, month, day, utc, 0)
lmst = siderial_time(year, month, day, utc, long)
print("Current date : ", year, month, day)
print("Universal Time (UTC) : ", utc)
print("Julian Date (0h UTC) : ", jd)
print("Julian Date + UTC : ", jd_utc)
print("Greenwich Mean Siderial Time (GMST): ", gmst)
print("Local Mean Siderial Time (LMST) : ", lmst)
if __name__ == "__main__":
main()