gpt4 book ai didi

java - 在 Java 中使用 MS 的 Integer8/LargeInteger?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:26:31 25 4
gpt4 key购买 nike

我正在通过 LDAP(使用 Spring LDAP)使用 AD,在使用 Integer8/LargeInteger 作为时间戳时遇到了一个奇怪的问题 outlined here .也就是说,我尝试写入该类型的字段导致......

Malformed 'field name here' attribute value

我已经尝试将 Longs 和 Strings 放入希望底层实现能够进行任何需要的转换,但没有成功。这是我做数学的方式......

/* AD Keeps track of time in 100 NS intervals (UTC) since Jan 1st 1601 */
long winEpocMS = new GregorianCalendar(1601, Calendar.JANUARY, 1).getTimeInMillis();
long nowMS = System.currentTimeMillis();
long winTime100NS = (nowMS - winEpocMS) * 10000;

是否有一种简单/优雅的方式来正确打包这些数据?是否有任何预构建的 Java 库来处理读取/写入这些相当奇怪的时间值?

奖励积分给任何可以解释为什么我们需要 100NS 分辨率的 64 位时间戳的人。

最佳答案

好的,这是细目......

/* time since Jan 1st 1601 00:00:00 UTC */
final long WIN_EPOC_MS = 11644473600000L;
final long now_ms = System.currentTimeMillis();
final long now_win_ns = (now_ms + WIN_EPOC_MS) * 10000L;

反向从上面的代码应该很明显。如果您想仔细检查转换,请使用 w32tm。比如下面显示我们正确的转换时间到Unix epoc(注意我是在CST)

w32tm /ntte 116444736000000000
134774 00:00:00.0000000 - 12/31/1969 06:00:00 PM (local time)

最后,在使用 AD 时,请确保该字段接受任何 值。有些字段取“-1”表示“现在”,“0”可能有特殊含义。此外,在某些情况下,时间属性修改是否与其他属性修改(例如 pwdLastSet 和 unicodePwd)捆绑在一起似乎很重要。

最后一点,我会避免使用 GregorianCalendar,除非你知道你的时区是正确的(这很容易搞砸)。

关于java - 在 Java 中使用 MS 的 Integer8/LargeInteger?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5184442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com