有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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());

共 (6) 个答案

  1. # 1 楼答案

    这是我的解决方案

    public class MyDateFromat{
        public static void main(String args[]){
            String ytdate = "PT1H1M15S";
            String result = ytdate.replace("PT","").replace("H",":").replace("M",":").replace("S","");
            String arr[]=result.split(":");
            String timeString = String.format("%d:%02d:%02d", Integer.parseInt(arr[0]), Integer.parseInt(arr[1]),Integer.parseInt(arr[2]));
            System.out.print(timeString);       
        }
    }
    

    如果你想在几秒钟内转换,它将返回一个H:MM:SS格式的字符串

    int timeInSedonds = int timeInSecond = Integer.parseInt(arr[0])*3600 + Integer.parseInt(arr[1])*60 +Integer.parseInt(arr[2])
    

    注意:它可能引发异常,所以请根据结果的大小进行处理。拆分(“:”)

  2. # 2 楼答案

    Java 8中的解决方案:

    Duration.parse(duration).getSeconds()
    
  3. # 3 楼答案

    我可能会迟到,其实很简单。尽管可能有更好的方法。持续时间以毫秒为单位

    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;
    }
    
  4. # 4 楼答案

    也许这会帮助那些不想要任何库,只想要一个简单函数的人

    String duration="PT1H11M14S";
    

    这就是功能

    private String getTimeFromString(String duration) {
        // TODO Auto-generated method stub
        String time = "";
        boolean hourexists = false, minutesexists = false, secondsexists = false;
        if (duration.contains("H"))
            hourexists = true;
        if (duration.contains("M"))
            minutesexists = true;
        if (duration.contains("S"))
            secondsexists = true;
        if (hourexists) {
            String hour = "";
            hour = duration.substring(duration.indexOf("T") + 1,
                    duration.indexOf("H"));
            if (hour.length() == 1)
                hour = "0" + hour;
            time += hour + ":";
        }
        if (minutesexists) {
            String minutes = "";
            if (hourexists)
                minutes = duration.substring(duration.indexOf("H") + 1,
                        duration.indexOf("M"));
            else
                minutes = duration.substring(duration.indexOf("T") + 1,
                        duration.indexOf("M"));
            if (minutes.length() == 1)
                minutes = "0" + minutes;
            time += minutes + ":";
        } else {
            time += "00:";
        }
        if (secondsexists) {
            String seconds = "";
            if (hourexists) {
                if (minutesexists)
                    seconds = duration.substring(duration.indexOf("M") + 1,
                            duration.indexOf("S"));
                else
                    seconds = duration.substring(duration.indexOf("H") + 1,
                            duration.indexOf("S"));
            } else if (minutesexists)
                seconds = duration.substring(duration.indexOf("M") + 1,
                        duration.indexOf("S"));
            else
                seconds = duration.substring(duration.indexOf("T") + 1,
                        duration.indexOf("S"));
            if (seconds.length() == 1)
                seconds = "0" + seconds;
            time += seconds;
        }
        return time;
    }
    
  5. # 5 楼答案

    Joda Time是任何类型的时间相关函数的go-to库

    对于这个特定的情况ISOPeriodFormat.standard()返回一个^{},可以解析并格式化该格式

    结果对象是a ^{}JavaDoc)。获取实际秒数将是period.toStandardSeconds().getSeconds(),但我建议您只将持续时间作为Period对象处理(为了便于处理和类型安全)

    编辑:来自未来我的一条提示:这个答案已经有好几年历史了。Java8带来了java.time.Duration,它也可以解析这种格式,不需要外部库

  6. # 6 楼答案

    您可以使用标准SimpleDateFormatString解析为Date并从那里处理它:

    DateFormat df = new SimpleDateFormat("'PT'mm'M'ss'S'");
    String youtubeDuration = "PT1M13S";
    Date d = df.parse(youtubeDuration);
    Calendar c = new GregorianCalendar();
    c.setTime(d);
    c.setTimeZone(TimeZone.getDefault());
    System.out.println(c.get(Calendar.MINUTE));
    System.out.println(c.get(Calendar.SECOND));