我需要将Instant转换为.Net的DateTime.Ticks,即代表从0001年1月1日0:00:00 UTC以来一百纳秒数的长整数。

不幸的是,没有ChronoUnit.HUNDRED_NANOS这样的东西,因此似乎必须自己编写代码。

最佳答案

下面的功能toDotNetDateTimeTicks(Instant)可以解决问题。

static long hundredNanosUntil(Instant begin, Instant end) {
    long secsDiff = Math.subtractExact(end.getEpochSecond(), begin.getEpochSecond());
    long totalHundredNanos = Math.multiplyExact(secsDiff, 10_000_000);
    return Math.addExact(totalHundredNanos, (end.getNano() - begin.getNano()) / 100);
}

static final Instant dotNetEpoch = ZonedDateTime.of(1, 1, 1, 0, 0, 0, 0,
                                               ZoneOffset.UTC).toInstant();

static long toDotNetDateTimeTicks(Instant i) {
    return hundredNanosUntil(dotNetEpoch, i);
}

关于java - 将Java Instant转换为.Net DateTime.Ticks,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49020567/

10-10 17:27