Einzelnen Beitrag anzeigen

EarlyBird

Registriert seit: 29. Mär 2007
235 Beiträge
 
#6

AW: IADsLargeInteger TO TDateTime

  Alt 19. Aug 2015, 17:55
Hallo,
ich nutze schon seit längerem die in diesem Beitrag gezeigte Funktion zum berechen eines Datums aus dem ActiveDirectory (AccountExpires)
Erst jetzt ist aufgefallen das das Datum nicht immer stimmt.
Ist AccountExpires z.B auf den 28.03.215 eingestellt gibt die Funktion den 29.03.2015 zurück.
Aber auch bei verschiedenen anderen Daten wird das falsche Datum zurückgegeben.
ich Nutze die Funktion genau so:
Delphi-Quellcode:
function GetDateTimeFromLargeInteger(largeIntValue: IADsLargeInteger): TDateTime;
var
  int64Value: Int64;
  LocalTime: TFileTime;
  SystemTime: TSystemTime;
  FileTime : TFileTime;
begin
  int64Value := largeIntValue.HighPart;
  int64Value := int64Value shl 32;
  int64Value := int64Value or largeIntValue.LowPart;
  FileTime := TFileTime(int64Value);
  Result := EncodeDate(1601,1,1);
  if FileTimeToLocalFileTime(FileTime, LocalTime) then
    if FileTimeToSystemTime(LocalTime, SystemTime) then
      Result := SystemTimeToDateTime(SystemTime);
end;
Manchmal wird sogar gar kein Datum (z.B. Datum 02.04.2014) zurückgegeben.
ich habe dies Zeile mal ausgeklammert
int64Value := int64Value or largeIntValue.LowPart; Dann wurde wieder ein Datum berechnet aber leider auch das Falsche.

Hat jemand einen Tipp was ich ändern muss um zuverlässig das richtige Datum zu erhalten

Besten Dank

Geändert von EarlyBird (19. Aug 2015 um 18:47 Uhr)
  Mit Zitat antworten Zitat