2011-08-24 8 views
3

Comment convertir une valeur de type Integer8 en une valeur DateTime? En particulier, j'essaie d'obtenir la propriété accountExpires Active Directory utilisateur sous une forme lisible par l'homme. SearchResult.GetDirectoryEntry.Properties("accountExpires") renvoie la valeur "9223372036854775807."Comment convertir une valeur Integer8 en DateTime?

Répondre

7

De http://www.dotnet247.com/247reference/msgs/19/96138.aspx

Un "Integer8" dans AD est un objet contenant deux 32 propriétés de bit, appelé LowPart et HighPart. Une telle propriété est renvoyée en tant que générique RCW (__ComObject), ce que vous devez faire est de déballer l'objet sous-jacent ou juste le cast à un type COM LargInteger. Après que vous devez combiner les deux propriétés dans un long (64 bits), si la valeur représente une date vous devez traduire le format de FileTime à DateTime.

La section suivante montre comment récupérer la propriété de date "lastLogon". !!! Définissez une référence à activeds.tlb ou créez une bibliothèque interop en utilisant tlbimp.exe !!!!

 // Use a cast ... 
    li = pcoll["lastLogon"].Value as LargeInteger; 
    // Or use CreateWrapperOfType 
    // li = (LargeIntegerClass)Marshal.CreateWrapperOfType(pcoll["lastLogon"].Value, 
typeof(LargeIntegerClass)); 
    // Convert to a long 
    long date = (((long)(li.HighPart) << 32) + (long) li.LowPart); 
    // convert date from FileTime format to DateTime 
    string dt = DateTime.FromFileTime(date).ToString(); 
+0

Merci, c'est vraiment utile! –