function StrToDate(
const AValue:
string): TDate;
var
LJahr, LMonat, LTag: Word;
function DaysOfMonth(AMonat: Word; AJahr: Word = 0): Word;
begin
if (AMonat = 0)
or (AMonat > 12)
then begin
Result := 0
end else begin
if AMonat = 2
then begin
if AJahr = 0
then begin
AJahr := CurrentYear;
end;
Result := 28 + Byte(IsLeapYear(AJahr));
end else begin
if AMonat > 7
then
Dec(AMonat);
Result := 30 + (AMonat
mod 2);
end;
end;
end;
begin
Result := 0;
LJahr := StrToIntDef(Copy(AValue, 1, 4), 0);
if (LJahr < 1)
or (LJahr > 3000)
then begin
exit;
end;
LMonat := StrToIntDef(Copy(AValue, 5, 2), 0);
if (LMonat < 1)
or (LMonat > 12)
then begin
exit;
end;
LTag := StrToIntDef(Copy(AValue, 7, 2), 0);
if (LTag < 1)
or (LTag > DaysOfMonth(LMonat, LJahr))
then begin
exit;
end;
if not TryEncodeDate(LJahr, LMonat, LTag, TDateTime(Result))
then begin
Result := 0;
end;
end;