计算两个时间点ISO 8601的持续时间

时间:2013-09-17 12:52:34

标签: java time duration iso8601

我有以下数据:

"startAt": "PT0S",
"endAt": "PT21M12.667S"

startAt定义视频的开头并结束视频的结尾。 如何计算这些点之间的时间?我想它的ISO 8601和我使用的是Java,但是我试过的库(Joda)确实使用了endAt参数。

2 个答案:

答案 0 :(得分:4)

这些是ISO-8601 期间值(不是时间点) - 而Joda Time处理它们很好:

import org.joda.time.*;
import org.joda.time.format.*;

public class Test {
    public static void main(String[] args) {
        String startText = "PT0S";
        String endText = "PT21M12.667S";

        PeriodFormatter format = ISOPeriodFormat.standard();
        Period start = format.parsePeriod(startText);
        Period end = format.parsePeriod(endText);

        Duration duration = end.minus(start).toStandardDuration();
        System.out.println(duration); // PT1272.667S
        System.out.println(duration.getMillis()); // 1272667
    }
}

答案 1 :(得分:0)

使用 Java-8 标准库

java.time.DurationISO-8601 standards 为模型,并作为 JSR-310 implementation 的一部分引入。

演示:

import java.time.Duration;

public class Main {
    public static void main(String[] args) {
        String startAt = "PT0S";
        String endAt = "PT21M12.667S";
        Duration start = Duration.parse(startAt);
        Duration end = Duration.parse(endAt);
        long millis = end.minus(start).toMillis();
        System.out.println(millis);
    }
}

输出:

1272667

Trail: Date Time 了解有关现代日期时间 API 的更多信息。