Java 将秒转换为T1H15M5S(ISO_8601)

Java 将秒转换为T1H15M5S(ISO_8601),java,time,converter,duration,Java,Time,Converter,Duration,我想用Java将秒数转换为ISO_8601/持续时间 有没有内置的现有方法可以执行此操作?由于ISO 8601允许持续时间字符串中的各个字段溢出,您可以在秒数前加上“PT”并附加“S”: 这将输出“PT4711S”,相当于“PT1H18M31S”。我建议使用库中的Period对象。然后您可以编写这样的方法: public static String secondsAsFormattedString(long seconds) { Period period = new Period(

我想用Java将秒数转换为ISO_8601/持续时间


有没有内置的现有方法可以执行此操作?

由于ISO 8601允许持续时间字符串中的各个字段溢出,您可以在秒数前加上“PT”并附加“S”:


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

我建议使用库中的Period对象。然后您可以编写这样的方法:

public static String secondsAsFormattedString(long seconds) {
     Period period = new Period(1000 * seconds);
     return "PT" + period.getHours() + "H" + period.getMinutes() + "M" + period.getSeconds() + "S";
 }

我支持JodaTime图书馆的建议;但我建议使用toString()或Joda的ISOPeriodFormat类,因为小时间段(如300秒)将显示为“PT0H5M0S”,虽然正确,但可能会失败,例如(编写糟糕的)ISO认证测试预期为“PT5M”

虽然我从未见过period.toString()给出错误的结果,但为了清晰起见,我使用了ISOPeriodFormat

演示:

import java.time.Duration;

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

import java.time.Duration;

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

主要研究一下,谷歌,Stackoverflow为什么会这样?因为在我看来,这就像是一个简单的tostring方法的格式化。我不知道你需要哪个参数,但它看起来很简单,我猜是mod函数,我自己做其他的数学运算。但问题是要知道是否存在某种东西。我可能不是第一个尝试这样做的人(我希望如此)。你能告诉我格式是怎样的吗,比如HH:MM:SS:MM?T1H15M5S-@jarnbjo我测试了它,它确实如此<代码>第二个格式化字符串(60*60*24*2+62)=>
PT48H1M2S
。你的输出是什么?你是对的,我实际上没有试过。与Joda API文档的情况一样,Period类的文档不一致,并且构造函数周期(long)没有填充所述的“标准字段集”,假设“标准字段集”是“标准周期类型”,“支持年、月、周、日、时、分、秒和毫秒”。