2017-01-09 150 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