c# - 将 LDAP 中的 WhenChanged 属性(通用时间)转换为 C# 中的 DateTime

标签 c# datetime ldap

我最近从使用 S.DS 命名空间(使用 ADSI)切换到 S.SD.Protocol 命名空间。唯一的问题是 ADSI 为我处理了 Generalized-Time 到 DateTime 的转换。现在,我为 WhenChanged 属性取回值“20070828085401.0Z”。 DateTime.Parse() 不会转换它,还有其他方法吗?

最佳答案

您获得的格式接近往返日期时间模式(“o”)和通用可排序往返日期时间模式(“u”)标准日期时间格式字符串,如 here 所述.

一个笨拙的解决方案是修改你得到的字符串以适应模式,然后将“o”或“u”标准格式字符串与ParseExact一起使用。 .

更好的方法是构造一个 custom format string与您已经获得的数据相匹配。在标准日期时间格式字符串页面的“标准格式字符串如何工作”部分中,您将看到等同于“o”和“u”的完整自定义格式字符串。这应该会给您一个良好的开端。


编辑:添加代码

string format = "yyyyMMddHHmmss.f'Z'";

string target = "20070828085401.0Z";

DateTime d = DateTime.ParseExact(target, format, CultureInfo.InvariantCulture);

评论中lixonn观察到,使用上面的格式字符串,ParseExact 将无法成功解析像 199412160532-0500 这样的时间字符串。

它也不会解析许多其他有效字符串,例如没有尾随“Zulu”指示符的时间 (20070828085401.0);不带小数部分的时间 (20070828085401Z) 以及将分钟和秒表示为小数小时的时间 (2007082808.90028Z)。

通过用 K custom specifier 替换硬编码的 'Z' 可以使格式字符串稍微更宽容一些。它将接受 'Z',一个像 -0500 这样的偏移量,什么都不接受。 这种额外的灵 active 是否是一件好事将取决于您的应用。

请注意,即使使用 K 说明符,Lixonn 的字符串也不会被成功解析,因为它缺少匹配格式字符串的 .f 组件的小数部分。

关于c# - 将 LDAP 中的 WhenChanged 属性(通用时间)转换为 C# 中的 DateTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5517695/

相关文章:

Python。将字符串转换为日期时间抛出 ValueError

java - 将 DateTime 对象与 JODA 进行比较时的奇怪行为

ldap - rabbitmq ldap对用户DN不一致的组进行授权

php - 通过仅具有登录凭据的 LDAP 和 PHP 获取用户可读的名称

c# - 测试 Web 服务流量的免费工具?

c# - 有没有办法在 C# 中捕获调试消息,然后将它们输出到单独的窗口?

c# - c# 中的(签名的)位图比较

c# - 如何在新的 ormlite api 中设置命令超时

c# - 将以 mm/dd/yyyy 为单位的日期时间转换为以 yyyy-dd-mm 为单位的日期时间

ldap - 基于ldap-groups访问gitlab