問題描述
public static string GetProperty(SearchResult searchResult, string PropertyName)
{
if (searchResult.Properties.Contains(PropertyName))
{
return searchResult.Properties[PropertyName][0].ToString();
}
else
{
return string.Empty;
}
}
上述方法適用于大多數 Active Directory 屬性,但與日期/時間相關的屬性除外,例如 pwdLastSet、maxPwdAge 等.
The above method works great for most Active Directory properties except those that are related to date/time such as pwdLastSet, maxPwdAge, etc.
我的問題是如何將 pwdLastSet 設置為人類可讀的日期時間(例如 8/13/2013 或 2013 年 8 月 13 日等)
My question is how to I get the pwdLastSet to a human readable datetime (like 8/13/2013 or August 13, 2013, etc)
我試過了,但它拋出了異常
I've tries this but it threw exceptions
public static Int64 ConvertADSLargeIntegerToInt64(object adsLargeInteger)
{
var highPart = (Int32)adsLargeInteger.GetType().InvokeMember("HighPart", System.Reflection.BindingFlags.GetProperty, null, adsLargeInteger, null);
var lowPart = (Int32)adsLargeInteger.GetType().InvokeMember("LowPart", System.Reflection.BindingFlags.GetProperty, null, adsLargeInteger, null);
return highPart * ((Int64)UInt32.MaxValue + 1) + lowPart;
}
我使用以下代碼獲取時間為 Int64
I am using the following code to get the time as an Int64
Int64 passwordLastSet = ConvertADSLargeIntegerToInt64(objResult.Properties["pwdLastSet"][0]);
然后我打算使用 DateTime(Int64) 構造函數來創建一個 DateTime
Then I plan on using the DateTime(Int64) constructor to create a DateTime
推薦答案
根據 MSDN 文檔:
此值存儲為一個大整數,表示自 1601 年 1 月 1 日 (UTC) 以來的 100 納秒間隔數.
This value is stored as a large integer that represents the number of 100 nanosecond intervals since January 1, 1601 (UTC).
這與 DateTime.FromFileTimeUtc
、如所述完全一致這里.
而且我不確定為什么您覺得需要對整數進行低級操作.我想你可以施展它.
And I'm not sure why you feel the need to do the low level manipulation of the integer. I think you could just cast it.
所以就這樣做:
long value = (long)objResult.Properties["pwdLastSet"][0];
DateTime pwdLastSet = DateTime.FromFileTimeUtc(value);
這篇關于如何將 Active Directory pwdLastSet 轉換為日期/時間的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!