用于处理win32 FILETIME的Java库?

Lyk*_*yke 6 java

是否有任何Java库来处理win32 FILETIME /时间间隔?从1601年1月1日开始,它基本上是100ns间隔的64位时间戳.

(对于我的特殊需求,转换为/从java.util.Date转换或适当的joda时间相当于,但我需要访问至少微秒的分辨率 - 这似乎都没有提供.)

小智 8

如果你的毫秒级分辨率很好,这可行:

/** Difference between Filetime epoch and Unix epoch (in ms). */
private static final long FILETIME_EPOCH_DIFF = 11644473600000L;

/** One millisecond expressed in units of 100s of nanoseconds. */
private static final long FILETIME_ONE_MILLISECOND = 10 * 1000;

public static long filetimeToMillis(final long filetime) {
    return (filetime / FILETIME_ONE_MILLISECOND) - FILETIME_EPOCH_DIFF;
}

public static long millisToFiletime(final long millis) {
    return (millis + FILETIME_EPOCH_DIFF) * FILETIME_ONE_MILLISECOND;
}
Run Code Online (Sandbox Code Playgroud)

此时,从ms转换为Date对象非常简单.


Mar*_*rcB 0

上次我使用 JNI 解决了这个问题...(虽然不是在 Windows 上,但这是 unix)

也就是说,一段调用本机操作系统函数的 C++ 代码,然后使用 Java 本机接口调用该代码。

有点笨重,但这是我能找到的唯一方法(还需要 i 节点)。

编辑:假设这些值已经从其他来源获得,Date4J 可以处理带有 9 位小数的秒,但它的功能不如 Joda 丰富。