Hallo Bernd,
herzlichen Dank, aber irgendwie haut das nicht hin oder ich blick die Anwendung nicht.
Hab das mal so gemacht:
Code
Const
Date2000 : Word = 36526; {= 01/01/2000}
First2Months : Word = 59; {2000 was a leap year}
MinYear : Word = 2000;
Var
JYear : Word;
DK,MK : Byte;
YK : Word;
Procedure DateToDMY(Julian:Word; Var Day,Month:Byte; Var Year:Word);
Var I : LongInt;
Begin
If Julian<=First2Months
then
Year:=MinYear;
If Julian<=30
then
Month:=1;
Day:=Byte(Succ(Julian));
else
Month:=2;
Day:=Byte(Julian-30);
EndIf;
else
I:=(4*LongInt(Julian-First2Months))-1;
Year:=Word(I div 1461);
I:=(5*((I mod 1461) div 4))+2;
Month:=Byte(I div 153);
Day:=Byte(((I mod 153)+5) div 5);
If Month<10
then
Month:=Month+3;
else
Month:=Month-9;
Inc(Year);
EndIf;
Year:=Year+MinYear;
EndIf;
End DateToDMY;
Function DMYtoDate(Day,Month:Byte;Year:Word):Word;
Var Res : Word;
t1, t2 : word;
Begin
If (MinYear=word(Year)) and (Month<3)
then
If Month=1
then
Res:=Word(Pred(Day));
else
Res:=Word(Day+30);
EndIf;
else
If Month>2
then
Month:=Month-3;
else
Month:=Month+9;
Dec(Year);
EndIf;
Year:=Year-MinYear;
t1:=(Word(Year)*1461) div 4;
t2:=(153*Word(Month)+2) div 5;
Res:=t1+t2+Word(Day)+First2Months;
EndIf;
Return(Res);
End DMYtoDate;
Process ReadGPS;
..
..
TempSD:=Copy(NMEA.RMCDate,1,2);
DK:=StrToInt(TempSD);
TempSD:=Copy(NMEA.RMCDate,3,2);
MK:=StrToInt(TempSD);
TempSD:='20'+Copy(NMEA.RMCDate,5,2);
YK:=StrToInt(TempSD);
JYear:=(DMYtoDate(DK,MK,YK)+7168);
DateToDMY(JYear,DK,MK,YK);
YK:=YK-2000;
NMEA.RMCDate:=ByteToStr(DK)+ByteToStr(MK)+IntToStr(YK);
End ReadGPS;
Das Datum liegt als String in NMEA.RMCDate im Format z.B. '140599' vor.
Das Datum soll korrigiert und wieder in den String geschrieben werden.
So wie das jetzt ist, ist heute der '15829' (also der 15.82.09)
Ohne die Korrektur ist der 17.09.99
Schon richtig, daß das Jahr 4-stellig übergeben werden muß?
Ok ich sehs: deine Funktion ist für nach 2000 (jetzt hab ich das geschrieben und schicks auch ab
)
Gruss
Harry
[Edit]Ich muß ja einfach nur 3 1/2 Monate warten, dann funktioniert es.
[Edit #2]Moment vielleicht heißt das ja auch 15.08.(20)29 ..... 7168 Tage sind grob 19.6 Jahre, d.h. Übergabedatum wäre dann etwa 03/2010 ..... hmmmm bring auch nix.
[Edit #3]Da ich ja nur das Jahr und '20' davor gestellt habe, habe ich den 17.09.2099 übergeben. +7168 Tage sind dann grob 04/2129 .... paßt ja in etwa.