Как правильно отформатировать продолжительность видео Youtube в Java (android), взятом из YouTube API - PullRequest
1 голос
/ 07 марта 2020

У нас есть этот вызов в android:

https://www.googleapis.com/youtube/v3/videos?id=7nwwdhZzVro&part=contentDetails,statistics&key=YOUR_KEY

, который дает следующий результат:

{
"kind": "youtube#videoListResponse",
"etag": "\"SJZWTG6xR0eGuCOh2bX6w3s4F94/VOhpy08pTLV0gkKEHqgFjpTWvRY\"",
"pageInfo": {
    "totalResults": 1,
    "resultsPerPage": 1
},
"items": [{
    "kind": "youtube#video",
    "etag": "\"SJZWTG6xR0eGuCOh2bX6w3s4F94/zatyJpHwm5XYTpovyREQKk3FNh0\"",
    "id": "7nwwdhZzVro",
    "contentDetails": {
        "duration": "PT5M46S",
        "dimension": "2d",
        "definition": "hd",
        "caption": "false",
        "licensedContent": true,
        "projection": "rectangular"
    },
    "statistics": {
        "viewCount": "261804",
        "likeCount": "3069",
        "dislikeCount": "47",
        "favoriteCount": "0",
        "commentCount": "67"
    }
}]
}

Допустим, я сохранил значение в переменной с именем String videoDuration Как правильно отформатировать videoDuration в 00:00 или mm:ss? В моем случае это должно показать 05:46

Ответы [ 2 ]

3 голосов
/ 07 марта 2020

Это похоже на формат продолжительности iso8601 .

String videoDuration = "PT5M46S";
Duration dur = Duration.parse(videoDuration);
String strTime;
if (dur.toHours() > 0) {
    strTime = String.format("%d:%02d:%02d", 
                        dur.toHours(), 
                        dur.toMinutesPart(), 
                        dur.toSecondsPart());
} else {
    strTime = String.format("%02d:%02d",
                        dur.toMinutesPart(), 
                        dur.toSecondsPart());
}
System.out.println(strTime);

Это выводит:

05:46

Я бы оставил чек для часов, потому что некоторые YouTube продолжительность видео больше часа, и, таким образом, PT1H15M2S будет выдавать 1:15:02.

Обратите внимание, что toMinutesPart() и toSecondsPart() относятся к java 9, если вы все еще используете java 8 вы все равно можете использовать Duration для его анализа, но вы должны проверить другие способы его форматирования.

0 голосов
/ 05 апреля 2020

В моем случае android Студия выдала мне предупреждение: Call requires API level 26 (Current min is 21)

Так что у меня был успех с JODA time:

private String FormatdDate(String time) {
    Period dur = Period.parse(time);
    String strTime;
    if (dur.getHours() > 0) {
        strTime = String.format("%d:%02d:%02d",
                dur.getHours(),
                dur.getMinutes(),
                dur.getSeconds());
    } else {
        strTime = String.format("%02d:%02d",
                dur.getMinutes(),
                dur.getSeconds());
    }
    return strTime;
}
...