Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.014 Beiträge
 
Delphi 12 Athens
 
#4

AW: Kompliziertes Problem mit Wochentagberechnung

  Alt 28. Aug 2017, 23:41
Schön ist aber anders
Wie wär's denn damit?
Delphi-Quellcode:
type
  TDayOfWeekSet = set of 0..6;

// Wandelt das Format in ISO 8601 (Montag erster Tag) um
function GetDayOfWeek(const DateTime: TDateTime): ShortInt;
begin
  Result := (DayOfWeek(DateTime) + 5) mod 7;
end;

function GetNextAvailableWeekDay(const aExcludeDays: TDayOfWeekSet; StartTimestamp: Integer): Integer;
var
  dt: TDateTime;
  I: Integer;
begin
  dt := UnixToDateTime(StartTimestamp);
  for I := 0 to 6 do begin
    if not (GetDayOfWeek(dt) in aExcludeDays) then
      Exit(DateTimeToUnix(dt));
    dt := IncDay(dt);
  end;
  Result := 0;
end;

procedure TestCase;
var
  dt: TDateTime;
begin
  dt := UnixToDateTime(GetNextAvailableWeekDay([1..6], DateTimeToUnix(EncodeDate(2017, 08, 31))));
  Assert(SameDate(dt, EncodeDate(2017, 09, 04)));
end;
Ist nur so ein Gefühl, aber die negative Logik bei aExcludeDays würde ich in aAllowedDays umkehren. Aber das hängt vielleicht auch vom Kontext ab.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat