.NET DirectoryServices查找方法使用UTC还是本地时间?

内德姆

根据MSDNUserPrincipleComputerPrinciple的查找方法(如FindByLogonTime和FindByBadPasswordAttempt)使用UTC时间来过滤结果。但是,测试表明,这些方法似乎以本地时间为输入,而生成的对象使用UTC作为其时间属性,需要将其转换为本地时间。

这是一个示例,该示例似乎正确列出了自本地时间上午6点以来在服务器上尝试登录失败的所有用户:

    static void Main()
    {
        var pc = new PrincipalContext(ContextType.Domain, dcServer);
        PrincipalSearchResult<UserPrincipal> uFailed = UserPrincipal.FindByBadPasswordAttempt(pc, DateTime.Now.Date.AddHours(6), MatchType.GreaterThan);
        string s = "";
        foreach (UserPrincipal u in uFailed)
        {
            s += u.SamAccountName + ": " + Convert.ToDateTime(u.LastBadPasswordAttempt).ToLocalTime().ToString() + "\r\n";
        }
        Console.Write(s);
        Console.Read();
    }

请注意LastBadPasswordAttempt属性的UTC转换,但不在FindByBadPasswordAttempt筛选器中。

我担心将其投入生产,却不知道我是否有可能遗漏某些东西,或者MSDN文档是否错误。代码在查询的DC上运行,因此应该没有时区问题。

马特·约翰逊·品特

MSDN文档是准确的,您只需要注意传递.KindDateTime属性即可

如果深入研究参考源或进行反汇编,您会发现DateTime所传递值最终会传递给DateTime.ToFileTimeUtc,这确实会Kind考虑到其行为。

因此,您可以传递基于的值DateTime.UtcNow,该值为,具有.KindDateTimeKind.Utc并且可以正常工作;或者您可以像当前所做的那样传递值DateTime.Now并且传递具有的.KindDateTimeKind.Local并且本地时间将在查询之前转换为UTC。只要确保您意识到这是运行代码的计算机的本地时间即可如果有可能与您的用户所在的时区不是同一时区,那么您可能需要使用TimeZoneInfo该时间来获得与其他本地时区等效的UTC时间。

如果由于某种原因您决定传递自己构建的日期,则可能会有DateTimeKind.Unspecified对于此特定功能,将其视为UTC。并非所有日期/时间函数都适用,因此请务必小心。

另外,在输出中,Convert.ToDateTime当您使用的值已经是时,无需调用DateTime因此ToString,除非计划传递格式说明符,否则甚至不需要此代码中的。再说一次,如果您的用户可能在其他时区,请不要使用.ToLocalTime而是使用on上的一种方法进行TimeZoneInfo转换。

另一项微小的优化,您可以根据需要使用DateTime.Today代替DateTime.Now.Date(除了更具可读性之外,没有什么区别。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在ASP.NET Core中使用DirectoryServices

来自分类Dev

.NET与日期时间和UTC到本地时间转换的奇怪行为

来自分类Dev

.NET与日期时间和UTC到本地时间转换的奇怪行为

来自分类Dev

.NET Noda时间将特定时区的本地DateTime转换为UTC

来自分类Dev

.NET使用本地时区

来自分类Dev

VB.net使用system.directoryservices获得显示名称

来自分类Dev

在JSON.net中解析UTC时间

来自分类Dev

.Net DateTime与本地时间和DST

来自分类Dev

Quartz.net在UTC时间创建每日时间表

来自分类Dev

.NET CORE 时间异步方法

来自分类Dev

上次密码更改的/ etc / shadow日期-UTC还是本地时间?

来自分类Dev

我应该将BIOS设置为本地时间还是UTC?

来自分类Dev

如何检查硬件时钟是以UTC还是本地时间

来自分类Dev

文件修改时间是UTC还是本地时区?

来自分类Dev

我的项目使用 .NET Core 还是 .NET Standard

来自分类Dev

使用.NET Framework ArrayList类-如何查找方法

来自分类Dev

.Net如何获得UTC?

来自分类Dev

使用.NET的Xamarin iOS本地化

来自分类Dev

很长一段时间 C# MVC WebDev - 我应该使用 .NET Core 还是具体情况?

来自分类Dev

.NET System.DateTime.ToLocalTime() 返回无效的本地时间值

来自分类Dev

正确使用UTC时间戳和本地日期时间

来自分类Dev

在asp.net中查找直到超时触发的时间

来自分类Dev

.NET方法的异常是终止错误还是未终止错误?

来自分类Dev

asp.net mvc使用主动还是被动模型

来自分类Dev

.Net 4.5:我应该使用IDataErrorInfo还是INotifyDataErrorInfo?

来自分类Dev

.Net 4.5:我应该使用IDataErrorInfo还是INotifyDataErrorInfo?

来自分类Dev

我应该使用ASP.NET WebForms还是MVC

来自分类Dev

我应该使用 .Net Core 2.0 还是 2.1?

来自分类Dev

.NET Mvc本地化

Related 相关文章

热门标签

归档