对于1秒精度的转换,您自己的答案就可以了。如果您还需要转换秒的分数,这是一种方法。
Instant msFiletimeEpoch = Instant.parse("1601-01-01T00:00:00Z");
// a tick is 100 nanoseconds
int nanosPerTick = 100;
long ticksPerSecond = TimeUnit.SECONDS.toNanos(1) / nanosPerTick;
long fullval = 130_280_867_040_000_000L;
long seconds = fullval / ticksPerSecond;
long nanos = fullval % ticksPerSecond * nanosPerTick;
Instant answer = msFiletimeEpoch.plusSeconds(seconds).plusNanos(nanos);
System.out.println(answer);
输出为:
2013-11-05T00:58:24Z
让我们尝试在原始价值上再加上1个勾号;它应该增加100纳秒。
long fullval = 130_280_867_040_000_001L;
2013-11-05T00:58:24.000000100Z
确实如此。
请注意未来很长的日期:根据您的报价,Microsoft整数都是无符号的。Javalong
已签名。因此,在30828年的某个时候,我们将开始获得非常错误的结果。万一如果long
值是负数,我们应该抛出一个异常。