Получение миллисекундного формата

Я пытаюсь заставить эту строку возвращать Minute:Second:Millisecond для моего MediaPlayer. Я нашел этот код, но не могу понять, как заставить миллисекунды работать и поместить его в 2 знака после запятой. Я уверен, что это просто для правильного человека!

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

Всегда спасибо ребята


person Jonno    schedule 13.08.2011    source источник
comment
Возможно, вам следует взглянуть на Formatter?   -  person kylc    schedule 13.08.2011


Ответы (3)


В одной секунде 1000 миллисекунд, т.е. вам понадобится 3 десятичных знака для миллисекунд:

/** return time in format 1:23.456 */
private String getTimeString(long millis) {
    int minutes = (int) (millis / (1000 * 60));
    int seconds = (int) ((millis / 1000) % 60);
    int milliseconds = (int) (millis % 1000);
    String.format("%d:%02d.%03d", minutes, seconds, milliseconds);
}

Если вам абсолютно нужны 2 цифры для миллисекунд, вы фактически получите 1/100 секунды, а не миллисекунды:

/** return time in format 1:23.45 */
private String getTimeString(long millis) {
    int minutes = (int) (millis / (1000 * 60));
    int seconds = (int) ((millis / 1000) % 60);
    int seconds100 = (int) ((millis / 10) % 100);
    String.format("%d:%02d.%02d", minutes, seconds, seconds100);
}

Однако общий формат отображения для медиаплееров заключается в использовании одной цифры для десятых долей секунды:

/** return time in format 1:23.4 */
private String getTimeString(long millis) {
    int minutes = (int) (millis / (1000 * 60));
    int seconds = (int) ((millis / 1000) % 60);
    int seconds10 = (int) ((millis / 100) % 10);
    String.format("%d:%02d.%d", minutes, seconds, seconds10);
}
person Florian    schedule 13.08.2011

Если вы хотите поставить миллисекунды с двумя знаками после запятой, имейте в виду, что вы сможете показывать приращение только в 10 мс; 1 мс = 0,001 с, три десятичных знака. Но независимо от того, код, который вы ищете:

int rem_milliseconds = (int)(millis % 1000); // Remaining ms after last second
...
.append(String.format("%02d", rem_milliseconds));

Я оставил его с двумя знаками после запятой.

person Nullmech    schedule 13.08.2011

Попробуй это:

private String getTimeString(long millis) {
    long minutes = TimeUnit.MILLISECONDS.toMinutes(millis);
    long seconds = TimeUnit.MILLISECONDS.toSeconds(millis) -
                   TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis));
    millis -= TimeUnit.MINUTES.toMillis(minutes) + TimeUnit.SECONDS.toMillis(seconds);

    return String.format("%d:%d:%d", minutes, seconds, millis);
}
person JRL    schedule 13.08.2011