Frank Frank - 1 month ago 16
Java Question

Java: How to convert a string (HH:MM:SS) to a duration?

i want to convert a string with a format of HH:MM:SS or MM:SS or SS into a datatype of Duration.

solution:

private ArrayList<Duration> myCdDuration = new ArrayList<Duration>();

private void convert(String aDuration) {

chooseNewDuration(stringToInt(splitDuration(aDuration))); //stringToInt() returns an int[] and splitDuration() returns a String[]
}

private void chooseNewDuration(int[] array) {
int elements = array.length;
switch (elements) {
case 1:
myCdDuration.add(newDuration(true, 0, 0, 0, 0, 0, array[0]));
break;
case 2:
myCdDuration.add(newDuration(true, 0, 0, 0, 0, array[0], array[1]));
break;
case 3:
myCdDuration.add(newDuration(true, 0, 0, 0, array[0], array[1],
array[2]));
break;
}
}


thanks for help ... any easier way to do that ? -> create your own Duration class:

public class Duration {
private int intSongDuration;
private String printSongDuration;

public String getPrintSongDuration() {
return printSongDuration;
}

public void setPrintSongDuration(int songDuration) {
printSongDuration = intToStringDuration(songDuration);
}

public int getIntSongDuration() {
return intSongDuration;
}

public void setIntSongDuration(int songDuration) {
intSongDuration = songDuration;
}

public Duration(int songDuration) {

setIntSongDuration(songDuration);
}


Converts the int value into a String for output/print:

private String intToStringDuration(int aDuration) {
String result = "";

int hours = 0, minutes = 0, seconds = 0;

hours = aDuration / 3600;
minutes = (aDuration - hours * 3600) / 60;
seconds = (aDuration - (hours * 3600 + minutes * 60));

result = String.format("%02d:%02d:%02d", hours, minutes, seconds);
return result;
}

Answer
  1. Your myCdDuration is confusing. Do you want one Duration object equivalent to whatever was specified in the string, or a list of Duration objects where the first contains the hours, the second minutes etc?

  2. You can't just cast a String into some other object. You should parse the value into an numeric type and use DataTypeFactory to construct the Duration object.