【问题标题】:Calculate duration of two points in time ISO 8601计算两个时间点的持续时间 ISO 8601
【发布时间】:2013-09-17 12:52:33
【问题描述】:

我有以下数据:

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

startAt 定义视频的开头和 endAt 的结尾。 如何计算这些点之间的时间?我猜它的 ISO 8601 并且我使用的是 Java,但是我尝试的库 (Joda) 不能与 endAt 参数一起使用。

【问题讨论】:

  • 将它们转换为时间戳并减去? (时间戳,例如“自 1970-01-01 00:00 UTC 以来的毫秒数”)
  • @Fildor 并将它们转换为毫秒?这可能是问题
  • @Cruncher 我想是的。还没有看过那个 ISO,但是...
  • @Cruncher Jon 更快...

标签: java time duration iso8601


【解决方案1】:

这些是 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
    }
}

【讨论】:

  • 你什么都知道吗?还是你只是个研究之神?
  • @Cruncher:好吧,日期和时间 API 非常贴近我的心,所以很快就编写了示例代码......
  • 非常感谢先生!我只是不明白 12 和 667 之间的点字符,但这很好用!继续努力:)
【解决方案2】:

使用 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 的更多信息。

【讨论】:

    猜你喜欢
    • 2014-07-16
    • 2014-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多