我需要将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/