2016-10-03 205 views
0

我想將lastlogontimestamp轉換爲datetime,但我注意到對於大的值,我得到錯誤異常消息:索引超出範圍。必須是非負數且小於集合的大小。將lastlogontimestamp轉換爲DateTime

有沒有更好的方法來做到以下幾點?

var de = new DirectoryEntry("LDAP://GLOBAL.ABC.COM"); 
var ds = new DirectorySearcher(de); 
ds.Filter = string.Format("(&(objectCategory=user)(objectClass=user)({0}={1}))", 
    "samAccountName", username); 
ds.PropertiesToLoad.AddRange(new string[] { "samAccountName", "lastLogon" }); 
SearchResult sr = ds.FindOne(); 
long lastLogon = (long)sr.Properties["lastLogon"][0]; 
// lastLogon is 131111471723190497 
var dtLastLogon = DateTime.FromFileTime(lastLogon); 
return dtLastLogon.ToString(); 
+0

哪一個投擲「索引超出範圍」?請提供一個「大數值」的例子 – Julian

+0

這是我得到lastLogon變量的路線。值是131111471723190497 – Blade1

+0

是'long lastLogon =(long)sr.Properties [「lastLogon」] [0];''或'ds.PropertiesToLoad.AddRange(new string [] {「samAccountName」,「lastLogon」}); '? – Julian

回答

1

你的問題是事實上,帳戶不必具有lastLogon屬性。所以代碼應該看起來像

// ... 
SearchResult sr = ds.FindOne(); 
if (sr.Properties["lastLogon"] != null && sr.Properties["lastLogon"].Count > 0) 
{ 
    long lastLogon = (long)sr.Properties["lastLogon"][0]; 
    var dtLastLogon = DateTime.FromFileTime(lastLogon); 
    return dtLastLogon.ToString(); 
} 
// last logon is not set here - make something up; for example 
return DateTime.MinValue.ToString()