gpt4 book ai didi

java - Duration.between vs ChronoUnit.between

转载 作者:行者123 更新时间:2023-12-03 23:40:09 24 4
gpt4 key购买 nike

这两种方法是否等效?
版本 1:

var diff = Duration.between(begin, end).toHours();
第 2 版;
var diff = ChronoUnit.HOURS.between(begin, end);
有什么隐含的区别吗?如果是,我应该更喜欢哪一个?

最佳答案

分析在open JDK 15上的实现
A) Duration.between(begin, end).toHours(); Duration.between(begin, end)第一次打电话

long until(Temporal endExclusive, TemporalUnit unit); //called with unit of NANOS or SECONDS if first one fails
然后解析差异以创建 Duration基于已计算的纳米(如果纳米计算失败,则为秒)
public static Duration between(Temporal startInclusive, Temporal endExclusive) {
try {
return ofNanos(startInclusive.until(endExclusive, NANOS));
} catch (DateTimeException | ArithmeticException ex) {
long secs = startInclusive.until(endExclusive, SECONDS);
long nanos;
try {
nanos = endExclusive.getLong(NANO_OF_SECOND) - startInclusive.getLong(NANO_OF_SECOND);
if (secs > 0 && nanos < 0) {
secs++;
} else if (secs < 0 && nanos > 0) {
secs--;
}
} catch (DateTimeException ex2) {
nanos = 0;
}
return ofSeconds(secs, nanos);
}
然后你必须调用 toHours()然后解析创建的 Duration反对返回小时数
B)ChronoUnit.HOURS.between(开始,结束);
直接调用
long until(Temporal endExclusive, TemporalUnit unit);

//But instead of the implementation before, now it is called with unit of HOURS directly
它直接返回小时数。
实现比较
两者的工作方式相同(至少在几个小时内)并给出相同的结果。
但是对于 一个 似乎我们有一些不必要的来回转换。
解决方案 看起来很简单,没有任何我们不需要的转换
回答
我会选择 效率更高

关于java - Duration.between vs ChronoUnit.between,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66247921/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com