如何正确格式化取自 Youtube API Java (android) 的 Youtube 视频时长
How to properly format a Youtube video duration in Java (android) taken from Youtube API
我们在 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
这似乎遵循了iso8601 duration format。
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()
来自java9,如果你还在使用java8你仍然可以使用Duration
来解析它但你必须检查其他格式化方式。
就我而言 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;
}
我们在 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
这似乎遵循了iso8601 duration format。
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()
来自java9,如果你还在使用java8你仍然可以使用Duration
来解析它但你必须检查其他格式化方式。
就我而言 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;
}