如何正确显示MediaPlayer的位置/持续时间?

时间:2011-04-05 08:02:37

标签: android time formatting media-player

您好 我希望以简单的日期格式显示玩家位置和玩家持续时间。那是。 00:00:01/00:00:06。第一部分是玩家的当前位置,第二部分是持续时间。 我使用SimpleDateFormat尝试以此格式显示持续时间和位置,但它显示输出为05:30:00/05:30:06

以下是我正在使用的代码:

time1 = new SimpleDateFormat("HH:mm:ss");
currentTime.setText("" + time1.format(player.getCurrentPosition());

如何正确打印位置和持续时间? (它显示的小时/分钟不应该存在)。

请帮助我,Swathi Daruri。

2 个答案:

答案 0 :(得分:26)

DateFormat适用于日期,而不适用于时间间隔。因此,如果您获得1秒的位置,则DateFormat会将此解释为日期/时间是日历开始后的1秒(即1970年1月1日)。

你需要做类似

的事情
private String getTimeString(long millis) {
    StringBuffer buf = new StringBuffer();

    int hours = (int) (millis / (1000 * 60 * 60));
    int minutes = (int) ((millis % (1000 * 60 * 60)) / (1000 * 60));
    int seconds = (int) (((millis % (1000 * 60 * 60)) % (1000 * 60)) / 1000);

    buf
        .append(String.format("%02d", hours))
        .append(":")
        .append(String.format("%02d", minutes))
        .append(":")
        .append(String.format("%02d", seconds));

    return buf.toString();
}

然后执行类似

的操作
totalTime.setText(getTimeString(duration));
currentTime.setText(getTimeString(position));

答案 1 :(得分:0)

试试这个

fun getDurationString(durationMs: Long, negativePrefix: Boolean): String {
    val hours = TimeUnit.MILLISECONDS.toHours(durationMs)
    val minutes = TimeUnit.MILLISECONDS.toMinutes(durationMs)
    val seconds = TimeUnit.MILLISECONDS.toSeconds(durationMs)

    return if (hours > 0) {
        format(
            Locale.getDefault(), "%s%02d:%02d:%02d",
            if (negativePrefix) "- " else "",
            hours,
            minutes - TimeUnit.HOURS.toMinutes(hours),
            seconds - TimeUnit.MINUTES.toSeconds(minutes)
        )
    } else format(
        Locale.getDefault(), "%s%02d:%02d",
        if (negativePrefix) "- " else "",
        minutes,
        seconds - TimeUnit.MINUTES.toSeconds(minutes)
    )
}