2011-08-24 125 views
3

如何將Integer8類型的值轉換爲DateTime類型的值?特別是,我試圖以人類可讀的形式獲取Active Directory用戶屬性的accountExpiresSearchResult.GetDirectoryEntry.Properties("accountExpires")返回值「9223372036854775807」。如何將Integer8的值轉換爲DateTime?

回答

7

從在AD http://www.dotnet247.com/247reference/msgs/19/96138.aspx

的 「Integer8」 是保持兩個32位的屬性的對象,稱爲 LowPart和HighPArt。這樣的屬性作爲通用RCW (__ComObject)返回,您需要做的是打開底層對象或將其轉換爲LargInteger COM類型。之後,您必須將 這兩個屬性合併爲一個長整型(64位),如果該值表示日期 ,則必須將格式從FileTime轉換爲DateTime。

以下顯示如何檢索「lastLogon」日期屬性。 !設置一個 對activeds.tlb的引用,或使用 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

謝謝你,這是真的很有幫助! –