【问题标题】:How to convert a Time4J Duration to a count of minutes?如何将 Time4J 持续时间转换为分钟数?
【发布时间】:2021-08-04 14:21:22
【问题描述】:

如何将 Time4J Duration<ClockUnit> 转换为分钟数?我可以截断任何几秒钟,我只想要整分钟。几个简单的例子可能解释得最好:

  • Duration.of(1, ClockUnit.HOURS) 我要 60 个。
  • 对于Duration.of(34, ClockUnit.SECONDS),我想要0。

没有任何toMinutes 方法(就像java.time.Duration 中的方法一样)。我使用了NormalizergetTotalLength 方法和流操作,得到了一个 6 行的解决方案,但肯定有更简单的方法吗?

小时和秒的解决方案也可能很有趣,但我希望它们或多或少是对解决方案几分钟的微不足道的修改。

链接: Documentation of net.time4j.Duration

【问题讨论】:

    标签: java duration minute time4j


    【解决方案1】:

    归一化为分钟并使用 getPartialAmount()

    我们确实需要规范器。我们从ClockUnit.only() 得到它。然后getPartialAmount() 负责其余的工作。

        List<Duration<ClockUnit>> durations = Arrays.asList(
                Duration.of(1, ClockUnit.HOURS),
                Duration.of(34, ClockUnit.SECONDS));
        
        for (Duration<ClockUnit> dur : durations) {
            long minutes = dur.with(ClockUnit.MINUTES.only())
                    .getPartialAmount(ClockUnit.MINUTES);
            System.out.format("%s = %d minutes%n", dur, minutes);
        }
    

    输出:

    PT1H = 60 minutes
    PT34S = 0 minutes
    

    正如教程(底部的链接)中所解释的,Time4J 主要围绕按时间顺序排列的元素(或字段)设计,例如年、月,是的,分钟。所以在代码中我们首先需要将持续时间转换为只有分钟的持续时间,之后我们可以取出分钟元素的值——现在是持续时间中唯一的元素(在 14 秒的情况下,甚至没有任何分钟元素,但getPartialAmount() 在这种情况下会返回 0)。

    我们显然应该将转换包装成一个方法:

    private static final long durationToNumber(Duration<ClockUnit> dur, ClockUnit unit) {
        return dur.with(unit.only()).getPartialAmount(unit);
    }
    

    作为奖励,这种方法让我们可以免费转换为小时或秒:

        for (Duration<ClockUnit> dur : durations) {
            long hours = durationToNumber(dur, ClockUnit.HOURS);
            long seconds = durationToNumber(dur, ClockUnit.SECONDS);
            System.out.format("%s = %d hours or %d seconds%n", dur, hours, seconds);
        }
    
    PT1H = 1 hours or 3600 seconds
    PT34S = 0 hours or 34 seconds
    

    链接

    Time4J Tutorial: Element centric approach

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-12
      • 2012-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多