我了解 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/