将JodaTime的持续时间转换为字符串。

27
我有一部时长为127秒的电影。我想将它显示为02:07。实现这个的最佳方法是什么?

1
我已经使用 org.apache.commons.lang.time.DurationFormatUtils 进行了临时实现。 - fedor.belov
相关:https://dev59.com/mHM_5IYBdhLWcg3wTRHL - ripper234
3个回答

32
Duration yourDuration = //...
Period period = yourDuration.toPeriod();
PeriodFormatter minutesAndSeconds = new PeriodFormatterBuilder()
     .printZeroAlways()
     .appendMinutes()
     .appendSeparator(":")
     .appendSeconds()
     .toFormatter();
String result = minutesAndSeconds.print(period);

在最后一行要使用的函数是print(period),而不是pricntTo()。 - fodon

27

我需要这个东西,但我觉得Llyas的回答不准确。我想要一个计时器,而他的回答在我还剩0小时1分钟时给出了0:1 - 但这很容易通过一行代码来解决!

Period p = time.toPeriod();
PeriodFormatter hm = new PeriodFormatterBuilder()
    .printZeroAlways()
    .minimumPrintedDigits(2) // gives the '01'
    .appendHours()
    .appendSeparator(":")
    .appendMinutes()
    .toFormatter();
String result = hm.print(p);

这将为你提供 02:07


1
这似乎效果更好,我会优先投票支持这个答案,而不是接受的答案。 - Brian Agnew
我同意Brian的看法,minimumPrintedDigits(2)正是我所需要的。 - Amos M. Carpenter

1

java.time

以下是来自 Joda-Time首页的通知:

请注意,从Java SE 8开始,用户被要求迁移到java.time(JSR-310) - JDK的核心部分,取代了该项目。

使用现代日期时间API java.time 的解决方案

您可以使用{{link2:java.time.Duration}},它基于{{link3:ISO-8601标准}}并在Java-8中作为{{link4:JSR-310实现}}的一部分引入。在Java-9中还引入了一些更方便的方法。

演示:

import java.time.Duration;

public class Main {
    public static void main(String[] args) {
        Duration duration = Duration.ofSeconds(127);
        // Default format
        System.out.println(duration);

        // Custom format
        // ####################################Java-8####################################
        String formattedElapsedTime = String.format("%02d:%02d", duration.toMinutes(), duration.toSeconds() % 60);
        System.out.println(formattedElapsedTime);
        // ##############################################################################

        // ####################################Java-9####################################
        formattedElapsedTime = String.format("%02d:%02d", duration.toMinutesPart(),
                duration.toSecondsPart());
        System.out.println(formattedElapsedTime);
        // ##############################################################################
    }
}

输出:

PT2M7S
02:07
02:07

在线演示

教程:日期时间了解现代日期时间 API。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接