5

我想在 Java 中将秒数转换为 ISO_8601/Duration。

http://en.wikipedia.org/wiki/ISO_8601#Durations

是否有任何现有的方法可以做到这一点已经内置?

4

4 回答 4

2

由于 ISO 8601 允许持续时间字符串中的各个字段溢出,因此您只需将“PT”添加到秒数并附加“S”:

int secs = 4711;
String iso8601format = "PT" + secs + "S";

这将输出“PT4711S”,相当于“PT1H18M31S”。

于 2013-07-29T14:59:54.017 回答
2

我建议使用JodaTime库中的 Period 对象。然后你可以写一个这样的方法:

public static String secondsAsFormattedString(long seconds) {
     Period period = new Period(1000 * seconds);
     return "PT" + period.getHours() + "H" + period.getMinutes() + "M" + period.getSeconds() + "S";
 }
于 2013-07-29T15:06:21.650 回答
1

Duration#ofSeconds

演示:

import java.time.Duration;

public class Main {
    public static void main(String[] args) {
        System.out.println(Duration.ofSeconds(4711));
    }
}

输出:

PT1H18M31S
于 2020-12-29T10:58:03.207 回答
0

我赞同 JodaTime 库的推荐;但我建议使用 toString() 或 Joda 的 ISOPeriodFormat 类,因为小时间段(如 300 秒)将显示为“PT0H5M0S”,尽管它是正确的,但可能会失败,例如(编写不佳的)ISO 认证测试期望“PT5M”。

Period period = new Period(1000 * seconds);

String duration1 = period.toString();
String duration2 = ISOPeriodFormat.standard().print(period);

虽然我从未见过 period.toString() 给出不正确的结果,但为了清楚起见,我使用 ISOPeriodFormat。

于 2014-04-06T04:23:32.650 回答