开发者

Java library for dealing with win32 FILETIME?

Are there any Java libraries around for dealing with the win32 FILETIME/ time intervals ? It's basically a 64 bit timestamp in 100ns intervals since January 1, 1601.

(For my particular needs, converting to/from java.util.Date or an appropriate joda time eq开发者_开发技巧uivalent would do, although I'll need access to at least microsecond resolution - which neither seems to provide.)


If you are fine with millisecond resolution, this would work:

/** 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;
}

At this point, converting from ms to a Date object is quite straightforward.


Here's a Java 8+ java.time based solution that keeps 100-nanosecond precision:

public static final Instant ZERO = Instant.parse("1601-01-01T00:00:00Z");

public static long fromInstant(Instant instant) {
    Duration duration = Duration.between(ZERO, instant);
    return duration.getSeconds() * 10_000_000 + duration.getNano() / 100;
}

public static Instant toInstant(long fileTime) {
    Duration duration = Duration.of(fileTime / 10, ChronoUnit.MICROS).plus(fileTime % 10 * 100, ChronoUnit.NANOS);
    return ZERO.plus(duration);
}


Last time I solved this using JNI... (Although not on Windows, this was unix)

That is, a piece of C++ code that called the native OS functions, and then called that code using Java Native Interface.

A bit clunky, but it was the only way I could find (Also needed the i-node).

EDIT: Assuming the values are already obtained from some other source, Date4J can handle seconds with 9 decimals, but it is not as feature rich as Joda.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜