java - 有没有办法从一定数量的特定 TemporalUnit 创建一个周期?

标签 java java-time

创建 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/

相关文章:

java - JDBC 查询中的分页

java - SplitPane 垂直不起作用

java - 如何为柏林时区设置 ZoneOffset

java-8 - 使用 DateTimeFormatter 将字符串解析为 ZonedDateTime

java - 在 java.time (Java 8) 中正确地将时间转换为毫秒

java - 将字符串转换为 float ?

Java - 添加到 Lambda 表达式中的字符串

java - 如何测试删除方法

java - 我应该使用什么 Java DateTime 类?

无法在索引 0 处解析 java.time.format.DateTimeParseException