AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

IADsLargeInteger TO TDateTime

Ein Thema von cherry · begonnen am 17. Dez 2009 · letzter Beitrag vom 20. Aug 2015
Antwort Antwort
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#1

Re: IADsLargeInteger TO TDateTime

  Alt 17. Dez 2009, 08:08
Danke Andreas L.

Unglaublich aber wahr, so klappts!

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;
und so kann das ganze in Aktion aussehen:

Delphi-Quellcode:
        
  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)));
Nun drängt sich mir aber die Frage auf, was soll das ganze??? geht das nicht auch einfacher?
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
EarlyBird

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

AW: IADsLargeInteger TO TDateTime

  Alt 19. Aug 2015, 16: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 17:47 Uhr)
  Mit Zitat antworten Zitat
EarlyBird

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

AW: IADsLargeInteger TO TDateTime

  Alt 20. Aug 2015, 16:14
ich hab es jetzt folgender massen angepasst.
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 - 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;
Das behebt erstmal das Problem.
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
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:06 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