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 mglich 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°0537.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 Universal Time in die Greenwich Mean Sidereal Time (GAST
= scheinbare Sternzeit von Greenwich) für die ganzen Tage

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:
UTC = 25.06.1998 21h06min35s.000
Für die Berechnung von A wird als erstes das julianische Datum von
benötigt.
= 2450989,5
Damit ergibt sich für
und für A folgt
Für B erhalten wir
B = 1,00273790935079 . 21h06min35s.000
= 21h10min03s.0674
Daraus ergibt sich die Greenwich mean sidereal time
GMST = A+B = 15h21min47s.1090
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)
GAST = GMST + EoE = 15h21min46s.6697
| |
,
die um die Länge gedreht werden muß, um LAST zu erhalten.
LAST = GAST +
= 15h21min46s.6697
+ 00h52min22s.4667
3.Aufgabe:
Für einen Punkt mit der Länge
=13°2050.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:
UT(16.07.1998 12h04min37s.739) = 2451011,00321
UT(16.07.1998 00h00min00s.000) = 2451010,50000
UT(01.01.2000 00h00min00s.000) = 2451545,00000
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