views:

518

answers:

2

Is there some kind of built-in method or a simple function that will convert Duration into a string in the hh:mm:ss format? For example, I am looking for something that would convert a Duration of 123402 ms into a String of "2:03".

A: 

You can convert a Duration to a String using String.valueOf(dur). You can then use the Java formatting classes to reformat the String. You have to chop the end of String because of the way JavaFX formats durations as strings (eg '123402.0ms'). If JavaFX had a Long.valueOf(dur) function then this would be easier.

See sample below:

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.text.Text;
import javafx.scene.text.Font;
import javafx.scene.control.Button;
import java.text.SimpleDateFormat;
import java.util.Date;

var fmt = new SimpleDateFormat("m:ss");
var dur: Duration = 123402ms;
var txt: String = String.valueOf(dur);

Stage {
    title : "Duration Switch"
    scene: Scene {
        width: 400
        height: 200
        content: [
            Text {
                font : Font {
                    size: 24
                }
                x: 10, y: 30
                content: bind "Duration={txt}"
            },
            Button {
                translateY: 140
                text: "Switch"
                action: function() {
                    var durStr = String.valueOf(dur);
                    durStr = durStr.substring(0, durStr.indexOf("."));
                    var date = new Date(Long.parseLong(durStr));
                    txt = fmt.format(date);
                }
            }
        ]
    }
}
Matthew Hegarty
+1  A: 

Alternatively, you can use the flags from java.util.Formatter.

action: function() {
    txt = "{%tM dur}.{%tS dur}"
}

This will result in a leading 0, as in "02.03", for dur = "123402ms".

JimClarke