Seite 1 von 1
Formel für Datum -> mjd gesucht
Verfasst: Do 13. Jul 2006, 12:55
von Erdnussnase
Hat jemand eine Formel bzw. ein Stückchen Code wie ich von einem gegeben Datum auf die Topf eigene mjd Darstellung komme ?
Würde mir das Leben unter der IDE erleichtern.
Verfasst: Do 13. Jul 2006, 13:10
von Jetson
Was spricht dagegen TAP_MakeMjd() zu benutzen? (API-Doku S.19)
Verfasst: Do 13. Jul 2006, 13:24
von Erdnussnase
Das ich das nicht auf dem Topf brauche, sondern unter IDE (Windoof).
Verfasst: Do 13. Jul 2006, 13:36
von Miq
Wie sind denn die Formate vorher/nachher? Ich hätte da ein paar Minuten frei

Verfasst: Do 13. Jul 2006, 13:41
von ibbi
Hier sollte es die gewünschten Algorithmen geben.
Verfasst: Do 13. Jul 2006, 13:48
von jkIT
Versuch mal das, ist Pascal, aber bestimmt nicht schwehr in eine andere Programmiersprache zu übesetzen.
Code: Alles auswählen
type
TTFdatetime = packed record
swMJD : WORD;
hour : Byte;
min : Byte;
end;
function convert_date_time(year, month, day, hour, minute :integer; var date : TTFdatetime): boolean;
// EN 300 468 Annex C - Conversion between time and date conventions
// from www.ETSI.ch
const
month_to_days : array[1..13] of integer = (0,31,59,90,120,151,181,212,243,273,304,334,365);
var
day_in_year : integer;
iMJD : integer;
y, m, d, hr, min : integer;
begin
day_in_year := day + month_to_days[month];
if ((month > 2) and (year mod 4 = 0) and ((year mod 100 <> 0) or (year mod 400 = 0))) then
inc(day_in_year);
iMJD := (year - 1901) * 365 + ((year - 1901) div 4) -
((year - 1901) div 100) + ((year - 1601) div 400) +
day_in_year + 15384;
date.swMJD := swapWord(word(iMJD)); // change Endian for PowerPC and Mips
date.hour := hour;
date.min := minute;
// check_date_time
result := convert_date_time(date, y, m, d, hr, min) and
(y = year) and
(m = month) and
(d = day);
end;
Verfasst: Do 13. Jul 2006, 14:08
von Aldarin
oder die tfdll.dll Funktionen verwenden:
Code: Alles auswählen
extern "C" __declspec(dllimport) byte ExtractMjd(word mjd, word *year, byte *month, byte *day, byte *weekDay);
extern "C" __declspec(dllimport) word MakeMjd(word year, byte month, byte day);
Gruß
Aldarin
Verfasst: Do 13. Jul 2006, 19:49
von Harvey
An der Pascal-Routine stimmt was nicht (oder ich kann nicht Rechnen).
Für den 12.11.2006 soll 54051 rauskommen, ich errechne aber 54084.
Topfield hat's so implementiert (etliche maschinencodes zusammengefasst):
Code: Alles auswählen
if (Month==1 || Month==2) S4=1 else s4=0;
t9 = Year - s4;
t9 = t9 * 36525;
t9 = t9 + 36525 - 1901*36525;
t9 = t9 / 100 + Day;
t7 = s4 * 12 + Month + 1;
t7 = (t7 * 306001) / 10000;
return t9 + t7 + 14956;
Verfasst: Fr 14. Jul 2006, 14:55
von Erdnussnase
Besten Dank,
Da kann ich mir ja jetzt das beste raussuchen

Verfasst: Fr 14. Jul 2006, 16:03
von jkIT
Harvey hat geschrieben:An der Pascal-Routine stimmt was nicht (
oder ich kann nicht Rechnen
).
Für den 12.11.2006 soll 54051 rauskommen, ich errechne aber 54084
Da hast Du Dich tatsächlich verrechnet, da kommt schon 54051 raus.
Verfasst: Fr 14. Jul 2006, 16:23
von Harvey
Ich habe übersehen, dass das Array bei 1 anfängt

ops: