gpt4 book ai didi

java - 有没有一种直接的方法可以将 java.time.Period 转换为 java.time.Duration?

转载 作者:行者123 更新时间:2023-12-05 00:52:44 27 4
gpt4 key购买 nike

我了解 java.time.Period 是“估计”,而 java.time.Duration 是准确的。我仍然想将期间转换为持续时间。或者至少在不诉诸诡计的情况下宣布持续数周或更长时间。

即使这样编译,它也会抛出运行时异常,因为 ChronoUnit.WEEKS 和更大的返回 true 为 ChronoUnit.isDurationEstimated()

var d = Duration.of(2, ChronoUnit.WEEKS);

同样,这会编译但出于同样的原因抛出:

var d = Duration.from(Period.ofWeeks(2));

从 ISO-8601 字符串进行往返是可行的,但味道不对:

var p = Period.ofWeeks(2);
var d = Duration.parse(p.toString());

有没有更好的方法来做到这一点?

最佳答案

没有直接的方法可以将 Period 转换为 Duration,因为您必须将年或月转换为天、分、秒、毫秒或毫微秒。但是,1 年等于 365 天还是 366 天(闰年)?还是 1 个月等于 28、29、30 或 31 天?

但是,您可以进行估算。例如:

public static Duration ofPeriod(Period period) {

long days = period.getDays() + Math.round((period.toTotalMonths() / 12d) * 365.2425d);

return Duration.ofDays(days);
}

那么你可以这样做:

Period period = Period.ofWeeks(2);

Duration duration = ofPeriod(period);

System.out.println(duration);

输出:

PT336H

关于java - 有没有一种直接的方法可以将 java.time.Period 转换为 java.time.Duration?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69247292/

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