![]() |
IADsLargeInteger TO TDateTime
Mooorgeeen.
Ich gebs auf... Ich kriegs nicht auf die Reihe das Attribut pwdLastSet (IADsLargeInteger) in ein lesbares TDateTime zu konvertieren. Bis jetzt hab ich 100te Beispiele angeschaut aber nichts scheint zu klappen. Ich hab bis jetzt so was hier:
Delphi-Quellcode:
Danke schon mal.
function GetDateTimeFromLargeInteger(largeIntValue: IADsLargeInteger): TDateTime;
var int64Value: Int64; begin // Convert large integer to int64 value int64Value := largeIntValue.HighPart; int64Value := int64Value shl 32; int64Value := int64Value or largeIntValue.LowPart; // return datetime result := FileDateToDateTime(int64Value); end; |
Re: IADsLargeInteger TO TDateTime
Hier: http://msdn.microsoft.com/en-us/library/aa706037(VS.85).aspx
Wird zumindest FileTimeToSystemTile vorgeschlagen -- weiß nicht, ob das das selbe ist wie FileTimeToDateTime... Viele Grüße |
Re: IADsLargeInteger TO TDateTime
Hmm... das scheint nochmals ganz was anderes zu sein. Jemand hat das sicher schon gemacht oder?
|
Re: IADsLargeInteger TO TDateTime
Wenn IADsLargeInteger dem TFileTime entspricht kannst du folgenden Code verwenden:
Delphi-Quellcode:
function FileTimeToDateTime(FileTime: TFileTime):TDateTime;
var LocalTime: TFileTime; SystemTime: TSystemTime; begin Result := EncodeDate(1900,1,1); if FileTimeToLocalFileTime(FileTime, LocalTime) then if FileTimeToSystemTime(LocalTime, SystemTime) then Result := SystemTimeToDateTime(SystemTime); end; |
Re: IADsLargeInteger TO TDateTime
Danke Andreas L.
Unglaublich aber wahr, so klappts!
Delphi-Quellcode:
und so kann das ganze in Aktion aussehen:
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;
Delphi-Quellcode:
Nun drängt sich mir aber die Frage auf, was soll das ganze??? geht das nicht auch einfacher?pls := Get('pwdLastSet'); li := IDispatch(pls) As IADsLargeInteger; if Trunc(GetDateTimeFromLargeInteger(li)) = EncodeDate(1601,1,1) then ShowMessage('password never expires') else ShowMessage(DateTimeToStr(GetDateTimeFromLargeInteger(li))); |
AW: IADsLargeInteger TO TDateTime
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:
Manchmal wird sogar gar kein Datum (z.B. Datum 02.04.2014) zurückgegeben.
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; ich habe dies Zeile mal ausgeklammert
Delphi-Quellcode:
Dann wurde wieder ein Datum berechnet aber leider auch das Falsche.
int64Value := int64Value or largeIntValue.LowPart;
Hat jemand einen Tipp was ich ändern muss um zuverlässig das richtige Datum zu erhalten Besten Dank |
AW: IADsLargeInteger TO TDateTime
ich hab es jetzt folgender massen angepasst.
Delphi-Quellcode:
Das behebt erstmal das Problem.
function GetDateTimeFromLargeInteger(largeIntValue: IADsLargeInteger): TDateTime;
var int64Value: Int64; LocalTime: TFileTime; SystemTime: TSystemTime; FileTime : TFileTime; begin int64Value := largeIntValue.HighPart; int64Value := int64Value shl 32; int64Value := int64Value - 100000000000; // 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; Damit wird bei allen Usern das richtige Datum angezeigt. Die richtige und zuverlässig Lösung ist das aber nicht. Ich hoffe mir kann jemand helfen eien zuverlässige Lösung zu finden. Besten Dank |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz