Universal- und Siderial Time

1.Aufgabe:

Zur Umrechnung der Universal Time in das Julianische Datum ist ein Programm zu schreiben, dabei soll eine Berechnung für alle Tage nach dem 01.03.1600 möglich sein.

/*****************************************************************
**  Titel:              Julianisches Datum                      **
**  Programmiersprache: Ansi-C                                  **
**  Autor:              Michael Gendt  171766                   **
**  Quellcode:          julian.c                                **
**  Erstellungsdatum:   26.06.1998                              **
**  Letzte Aenderung:   26.06.1998                              **
**  Grund der Programmierung: Uebung 6 - Erdmessung I           **
*****************************************************************/
#include "stdio.h"
#include "stdlib.h"
#include "math.h"

typedef struct
{       int day,mon,year,h,min;
        double sec;
}       UT;

double UT_to_JD(UT time);
double UT_to_JD2(UT time);

void main()
{
        UT time_UT={1,1,1600,12,00,00.0};
        double time_JD;
        time_JD=UT_to_JD(time_UT);
        printf("\n\ntime_UT = %02i.%02i.%02i %02i.%02i.%06.3lf Uhr",time_UT.day,time_UT.mon
         ,time_UT.year,time_UT.h,time_UT.min,time_UT.sec);
        printf("\ntime_JD = %13.3lf",time_JD);
        time_JD=UT_to_JD2(time_UT);
        printf("\ntime_JD = %13.3lf",time_JD);
}

double UT_to_JD(UT time)
{
        int mon[]={0,0,31,59,90,120,151,181,212,243,273,304,334},y_d,sj;
        double time_JD=2305447.0; /*** 00.01.1600 12.00.00 Uhr ***/

        y_d=time.year-1600;
        if (y_d<0) {printf("Berechnung nicht m”glich year<1600");exit(0);}
        time_JD += time.day + mon[time.mon] + y_d*365.0;
        time_JD += floor(y_d/4) - floor(y_d/100) + floor(y_d/400) + 1;

        if ((int)fmod(y_d,4)==0) sj=1;
        if ((int)fmod(y_d,100)==0) sj=0;
        if ((int)fmod(y_d,400)==0) sj=1;
        if ((time.mon<3)&&(sj==1)) time_JD--;
        time_JD += (time.h+time.min/60.+time.sec/3600.-12.)/24;
        return time_JD;
}
Nutz man die Eigenschaft aus, daß man nach Teilung eines Integerwertes auf jeden Fall ein Integer-Wert erhält (Nachkommastellen werden abgehackt), kann man folgende Funktion verwenden. Zudem wurde eine andere Möglichkeit der Abfrage eines möglichen Schaltjahres genutzt (schnellere Rechenzeit).
double UT_to_JD2(UT time)
{
        int mon[]={0,0,31,59,90,120,151,181,212,243,273,304,334},y_d;
        double time_JD=2305447.0; /*** 00.01.1600 12.00.00 Uhr ***/

        y_d=time.year-1600;

        if (y_d<0) 
        {  printf("Berechnung nicht moeglich year<1600");
           exit(0);
        }

        time_JD += time.day + mon[time.mon]+ y_d*365.0;
        time_JD += y_d/4 - y_d/100 + y_d/400 + 1;

        if ((time.mon<3)&&((int)fmod(y_d,4)==0)&&((y_d/100-4*y_d/400)!=0))
          time_JD--; /*** Abfrage Schaltjahr***/
        time_JD += (time.h+time.min/60.+time.sec/3600.-12.)/24;
        return time_JD;
}


Ergebnis: time_JD = 2445889,906
2.Aufgabe:

Für einen Punkt mit der Länge =13°05’37’’.000 und der Zeit 25.06.1998 23h06min35s.000 MESZ (Mitteleuropäinnsche Sommerzeit) soll die scheinbare (wahre) Sternzeit (LAST) berechnet werden.

Für die Berechnung der Local Apperent Sidereal Time (LAST) läßt sich folgende Formel angeben:

dabei sind: Umrechnung der Tagesbruchteile von UT nach GAST, dabei wird berücksichtigt, daß ein Sterntag rund 4min kürzer als ein Sonnentag ist. Dies beruht auf der Tatsache, daß sich die Erde pro Tag (360/365)° auf ihrer Bahn fortbewegt (Rotation um die Sonne).

 

Berücksichtigung der Nutation (Berechnung der Winkel siehe Übung 4 - Nutation und Präzession)
 

Transformation von GAST in die lokale Zeit (LAST)
 
Zunächst müssen wir beachten, daß uns die Zeit nicht in UT gegeben ist, sondern für die MESZ, es sollte deshalb die Transformation durchgeführt werden. In unserem Fall erhalten wir: Für die Berechnung von A wird als erstes das julianische Datum von 
benötigt. Damit ergibt sich für  und für A folgt Für B erhalten wir Daraus ergibt sich die Greenwich mean sidereal time Im Anschluß können wir den Einfluß der Nutation berechnen und auf die GMST anbringen. Die Nutationswinkel  und lassen sich wie in Übung 4 gezeigt in Abhängigkeit von der Zeit und mit Hilfe von Koeffizienten berechnen. Für die Zeit t nehmen wir die tatsächliche Zeitdifferenz zur Basisepoche an, also nicht die Differenz zu 0.00 Uhr.

Für unseren Fall erhalten wir:

und damit Daraus folgt für EoE: Durch Addition mit der GMST erhalten wir die GAST (Greenwich Apparent Sidereal Time) die um die Länge gedreht werden muß, um LAST zu erhalten.

3.Aufgabe:

Für einen Punkt mit der Länge =13°20’50’’.000 und der scheinbaren Sternzeit 16.07.1998 12h04min37s.739 soll die MESZ berechnet werden. Die Berechnung ist die Umkehrung der Aufgabe 2 gezeigten Transformation, sie lautet:

Die julianischen Daten für die benötigten Zeiten sind: In unserem Fall lauten die einzelnen Größen: mit t = -0,014633812, und 

A = -19h34min31s.7043

mit 

Für Tagesbruchteil am 16.07.1998 erhalten wir folglich: Da wir nicht die Zeit UTC suchen, müssen wir jetzt noch 2h addieren um die MESZ zu erhalten.

(ohne Gewähr auf Richtigkeit) 


Stand:  © (Michael Gendt,Frank Oheim), Hinweise und Ergänzungen an mg oder weiter