首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将Time4J持续时间转换为分钟数?

如何将Time4J持续时间转换为分钟数?
EN

Stack Overflow用户
提问于 2021-08-04 14:21:22
回答 1查看 99关注 0票数 3

如何将Time4J Duration<ClockUnit>转换为多分钟?我不介意剪掉任何一秒钟,我只想整分钟。几个简单的例子可能解释了最好的方法:

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

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

几个小时和几秒钟的解决方案也可能很有趣,但我希望它们在几分钟内或多或少是对解决方案的琐碎修改。

链接: net.time4j.Duration

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-04 14:31:27

规范化为分钟并使用getPartialAmount()

我们确实需要正常化器。我们从ClockUnit.only()那里得到的。然后,getPartialAmount()负责其余的事务。

代码语言:javascript
复制
    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分钟PT34S =0分钟

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

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

代码语言:javascript
复制
private static final long durationToNumber(Duration<ClockUnit> dur, ClockUnit unit) {
    return dur.with(unit.only()).getPartialAmount(unit);
}

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

代码语言:javascript
复制
    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小时或3600秒PT34S =0小时或34秒

链接

Time4J教程:以元素为中心的方法

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68652953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档