Sternzeit berechnen

Hier ein kleines Python-Programm zur Berechnung des Julianischen Datums und der Sternzeit. Geschrieben für Python 3.4 auf MacOS, müsste aber auch auf anderen Betriebssystemen und Python-Versionen funktionieren.

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()