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

Converting the WhenChanged attribute (Generalized-Time) in LDAP to a DateTime in C#(将 LDAP 中的 WhenChanged 属性(通用时间)转换为 C# 中的 DateTime)
本文介绍了将 LDAP 中的 WhenChanged 属性(通用时间)转换为 C# 中的 DateTime的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我最近从使用 S.DS 命名空间(使用 ADSI)切换到 S.SD.Protocol 命名空间.唯一的问题是 ADSI 为我处理了广义时间到日期时间的转换.现在,我为 WhenChanged 属性返回了20070828085401.0Z"的值.DateTime.Parse() 不会转换这个,还有其他方法吗?

I recently switch from using S.DS namespace (which uses ADSI) to the S.SD.Protocol namespace. The only problem is that ADSI handled the conversion of Generalized-Time to a DateTime for me. Now I'm getting back a value of "20070828085401.0Z" for the WhenChanged attribute. DateTime.Parse() will not convert this so is there another way?

推荐答案

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

The format you are getting is close to the round trip date time pattern ("o") and universal sortable round trip date time pattern ("u") standard date time format strings as described here.

一个笨拙的解决方案是按摩你得到的字符串以适应模式,然后使用带有 ParseExact.

One kludgy solution would be to massage the string you get to fit the pattern and then use the "o" or "u" standard format string with ParseExact.

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

A better way would be to construct a custom format string that matches the data you are already getting. In the "How Standard Format Strings Work" section of the standard date time format strings page you'll see the full custom formatting strings equivalent to "o" and "u". That should give you a good start.

编辑:添加代码

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

string target = "20070828085401.0Z";

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

<小时>

在评论中 lixonn 观察到,使用上面的格式字符串,ParseExact 不会成功解析像 199412160532-0500 这样的时间字符串.


In the comments lixonn observes that, using the format string above, ParseExact will not successfully parse a time string like 199412160532-0500.

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

It also won't parse a number of other valid strings such as times without the trailing 'Zulu' indicator (20070828085401.0); times without a fractional part (20070828085401Z) and times that represent minutes and seconds as a fractional hour (2007082808.90028Z).

通过将硬编码的 'Z' 替换为 K 自定义说明符,它将接受Z"、-0500 之类的偏移量,什么都没有.额外的灵活性是否是一件好事将取决于您的应用程序.

The format string can be made slightly more forgiving by replacing the hard-coded 'Z' with the K custom specifier which will accept 'Z', an offset like -0500, and nothing. Whether that additional flexibility is a good thing will depend on your application.

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

Note that even with the K specifier Lixonn's string won't be parsed successfully since it lacks a fractional part to match the .f component of the format string.

这篇关于将 LDAP 中的 WhenChanged 属性(通用时间)转换为 C# 中的 DateTime的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

DispatcherQueue null when trying to update Ui property in ViewModel(尝试更新ViewModel中的Ui属性时DispatcherQueue为空)
Drawing over all windows on multiple monitors(在多个监视器上绘制所有窗口)
Programmatically show the desktop(以编程方式显示桌面)
c# Generic Setlt;Tgt; implementation to access objects by type(按类型访问对象的C#泛型集实现)
InvalidOperationException When using Context Injection in ASP.Net Core(在ASP.NET核心中使用上下文注入时发生InvalidOperationException)
LINQ many-to-many relationship, how to write a correct WHERE clause?(LINQ多对多关系,如何写一个正确的WHERE子句?)