如何用PowerShell将DateTimePicker值转换为NTTE时间格式?
解决DateTimePicker值转NTTE(AD FileTime)格式的问题
嘿,刚好之前处理过Active Directory时间戳的相关需求,给你捋清楚怎么弄!
首先得明确:你说的NTTE格式其实就是Windows的FileTime——它是从1601年1月1日(UTC)开始,以100纳秒为间隔的计数,这也是Active Directory存储时间戳的标准格式。
你用的DateTimePicker的Value属性是DateTime类型,.NET框架里已经内置了直接转换的方法,完全不用自己写复杂的转换逻辑:
核心转换代码示例
C#实现
// 获取DateTimePicker选中的本地时间 DateTime selectedLocalTime = dateTimePicker1.Value; // 转换为UTC时间(AD时间戳统一用UTC存储,这步很关键!) DateTime utcTime = selectedLocalTime.ToUniversalTime(); // 直接转换为NTTE(FileTime)格式的数值 long ntteTimestamp = utcTime.ToFileTimeUtc();
反向转换(从NTTE转回DateTime)
如果之后需要把AD里的NTTE值转回可读时间,也有现成方法:
long adNtteValue = 133245678901234567; // 示例AD中的NTTE值 DateTime readableTime = DateTime.FromFileTimeUtc(adNtteValue);
重要注意事项
- 必须转换为UTC时间!Active Directory中所有时间戳都是基于UTC存储的,要是直接用本地时间转换,会出现时间偏移的问题,导致AD条目时间不准确。
ToFileTimeUtc()方法会自动处理DateTime的Kind属性,哪怕你的DateTime已经是UTC类型,用这个方法也更稳妥,避免本地/UTC混淆的坑。
这样处理后,你得到的ntteTimestamp就是完全符合AD要求的NTTE格式数值,可以直接用来更新对应的AD属性啦。
内容的提问来源于stack exchange,提问作者Marcel Friesen
相关产品推荐
相关产品推荐

