2017-01-09 55 views
-2

我正在檢索Active Directory用戶帳戶的lastlogon字段。我在還沒有在很長一段時間登錄帳戶的情況下,發現我得到一個異常:如何將lastlogon從AD轉換爲datetime?

Exception type: ArgumentOutOfRangeException 
Exception message: Index was out of range. Must be non-negative and less than the size of the collection. 

參數名:指數

的代碼如下:

long lastLogon = (long)sr.Properties["lastLogon"][0]; 
DateTime dtLastLogon = DateTime.FromFileTime(lastLogon); 

是有一個適當的方法來施加這個並處理這個異常?

感謝

+0

'lastLogon'的值是什麼?它有價值還是0? –

+0

它的值爲0,或者(從不) – dotnetdev

回答

1

基於該錯誤消息我懷疑是錯誤實際上是在這裏:

sr.Properties["lastLogon"][0] 
在轉換爲 DateTime

不能及的。在致電[0]之前,我會添加一個長度爲sr.Properties["lastLogon"]的支票,以確保其長度至少爲1。那你在那種情況下取​​決於你。

+0

剛剛實現。 :)如果用戶長時間沒有登錄,代碼會出錯,所以時間戳是一個很大的值嗎? – dotnetdev

+0

是的。根據錯誤,sr.Properties [「lastLogon」]是一個長度爲0的數組。 – ebyrob

+0

@dotnetdev'fileTime'是一個自從1601開始計數的64位數字https://msdn.microsoft.com/zh-cn/library/system.datetime.fromfiletime(v=vs.110).aspx如果有的話,你在將來這個價值太大的時候會有問題。這不是一個倒數倒數,所以過去的價值不會更容易溢出。 – ebyrob