Deine Funktion liefert für die Jahre vor 1900 und ab 2100 ein falsches Ergebnis.
Meine Testfunktion;
Delphi-Quellcode:
Function DateIsLastSundayInMarch (aDate : TDateTime) : Boolean;
Begin
Result := (DateUtils.DayOfTheWeek(aDate) = DaySunday) // It is a sunday
and (MonthOf(aDate) = 3) // in march
and (MonthOf(aDate+7) = 4); // and the following sunday is in april
End;