创建 Duration
很简单作为给定数量的给定单位:
Duration duration = Duration.of(3, ChronoUnit.HOURS);
但是Period
没有这样的方法。最好的方法是什么?
我遇到的情况是,我有一个单位和一个计数作为变量,因此不能简单地对 period::ofYear 或类似的调用进行硬编码。
这是我想出的最干净的东西:
Period period = Period.from(new TemporalAmount() {
@Override
public long get(TemporalUnit unitToGet) { return unitToGet.equals(unit) ? amount : 0; }
@Override
public List<TemporalUnit> getUnits() { return List.of(unit); }
@Override
public Temporal addTo(Temporal temporal) { throw new UnsupportedOperationException(); }
@Override
public Temporal subtractFrom(Temporal temporal) { throw new UnsupportedOperationException(); }
});
从某种意义上说,这是干净的,它避免了嵌入一个时期可以拥有的单位的知识,尽管这可能过于纯粹。不过对于这样一个简单的操作来说似乎很冗长!
最佳答案
问题是 Period
不支持所有时间单位,因此通用方法在那里不适用。它可以被模拟,但只能相对于特定日期:
LocalDate base = LocalDate.of(2000, 1, 1);
LocalDate added = base.plus(amount, unit);
Period period = Period.between(base, added);
请务必考虑可变长度月份和 2 月 29 日会发生什么,因为这种方法可能不会达到您想要的行为。
关于java - 有没有办法从一定数量的特定 TemporalUnit 创建一个周期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71619682/