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.
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)
#!/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()