我想在 Java 中将秒数转换为 ISO_8601/Duration。
http://en.wikipedia.org/wiki/ISO_8601#Durations
是否有任何现有的方法可以做到这一点已经内置?
我想在 Java 中将秒数转换为 ISO_8601/Duration。
http://en.wikipedia.org/wiki/ISO_8601#Durations
是否有任何现有的方法可以做到这一点已经内置?
由于 ISO 8601 允许持续时间字符串中的各个字段溢出,因此您只需将“PT”添加到秒数并附加“S”:
int secs = 4711;
String iso8601format = "PT" + secs + "S";
这将输出“PT4711S”,相当于“PT1H18M31S”。
我建议使用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";
}
Duration#ofSeconds
演示:
import java.time.Duration;
public class Main {
public static void main(String[] args) {
System.out.println(Duration.ofSeconds(4711));
}
}
输出:
PT1H18M31S
我赞同 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。