Den Python-Quellcode sende ich gerne auf Anfrage zu.

# Einbruch der Astronomischen Dämmerung (Sonne steht tiefer als 18° unter dem Horizont) berechnen:
site.horizon = '-18:00' # Senke Horizont auf –18° ab.
try:
site.next_setting(ephem.Sun())
ausgabeTabelle[iDatum][iEreignis] = ephem.Date(site.next_setting(ephem.Sun()) + ephem.hour * zeitVerschiebung)
# zeitVerschiebung: Differenz zur UTC in Stunden, berücksichtigt MEZ/MESZ.
except ephem.AlwaysUpError:
# Astronomische Mitternachtsdämmerung: Sonne sinkt nicht tiefer als –18°
ausgabeTabelle[iDatum][iEreignis] = "--{}--:--{}--"

Das Python-Skript erzeugt für beliebige Standorte und Jahre einen tex-Code, der mit pdflatex in ein PDF übersetzt wird: