Search code examples
javaandroidstringformatmilliseconds

Getting millisecond format


I am trying to get this string to return Minute:Second:Millisecond for my MediaPlayer. I have found this code, but can't figure out how to make the Milliseconds work and put it at 2 decimal places. I'm sure its simple to the right person!

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

Thanks always guys


Solution

  • There are 1000 milliseconds in one second, i.e. you'd need 3 decimal places for the milliseconds:

    /** 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);
    }
    

    If you absolutely want 2 digits for milliseconds, you actually get 1/100 seconds and not milliseconds:

    /** 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);
    }
    

    However, a common display format for media players is to use one digit for 10ths of seconds:

    /** 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);
    }