如何在Java中转换Youtube API V3持续时间

Wil*_*lly 18 java youtube-api time-format

Youtube V3 API使用ISO8601时间格式来描述视频的持续时间.有点像"PT1M13S".现在我想将字符串转换为秒数(例如在这种情况下为73).

是否有任何Java库可以帮助我轻松完成Java 6下的任务?或者我必须自己做正则表达式的任务?

编辑

最后,我接受@Joachim Sauer的回答

示例代码Joda如下.

PeriodFormatter formatter = ISOPeriodFormat.standard();
Period p = formatter.parsePeriod("PT1H1M13S");
Seconds s = p.toStandardSeconds();

System.out.println(s.getSeconds());
Run Code Online (Sandbox Code Playgroud)

Joa*_*uer 15

Joda Time是任何类型的时间相关功能的首选库.

对于这种特定情况,ISOPeriodFormat.standard()返回一个PeriodFormatter可以解析和格式化该格式的东西.

将得到的对象是一个Period(JavaDoc的).然后获得实际的秒数period.toStandardSeconds().getSeconds(),但我建议您只将持续时间作为Period对象处理(为了便于处理和类型安全).

编辑:未来我的一个注释:这个答案现在好几年了.带来的Java 8 java.time.Duration也可以解析这种格式,不需要外部库.


小智 10

我可能会迟到,这实际上非常简单.虽然可能有更好的方法来做到这一点.持续时间以毫秒为单位.

public long getDuration() {
    String time = "PT15H12M46S".substring(2);
    long duration = 0L;
    Object[][] indexs = new Object[][]{{"H", 3600}, {"M", 60}, {"S", 1}};
    for(int i = 0; i < indexs.length; i++) {
        int index = time.indexOf((String) indexs[i][0]);
        if(index != -1) {
            String value = time.substring(0, index);
            duration += Integer.parseInt(value) * (int) indexs[i][1] * 1000;
            time = time.substring(value.length() + 1);
        }
    }
    return duration;
}
Run Code Online (Sandbox Code Playgroud)

  • 就像地狱一样简单. (2认同)

Kam*_*mil 9

Java 8中的解决方案:

Duration.parse(duration).getSeconds()
Run Code Online (Sandbox Code Playgroud)

  • 在Android中将此添加到gradle:`compileOptions {sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8}`(但它仅适用于26 API,因此目前不建议使用它) (2认同)