7

Suppose time is given in MM:SS(ex- 02:30) OR HH:MM:SS in String format.how can we convert this time to second.

Sritam Jagadev
  • 955
  • 4
  • 18
  • 46
  • 2
    refer http://stackoverflow.com/questions/8826270/how-to-convert-hhmmss-sss-to-milliseconds – Rince Thomas Mar 26 '15 at 07:21
  • 2
    or use JodaTime to parse to a duration: http://stackoverflow.com/questions/4619730/how-to-convert-string-hhmm-to-joda-duration – allotria Mar 26 '15 at 07:24
  • 1
    also check http://stackoverflow.com/questions/15561580/android-string-variable-hhmm-to-long-variable-miliseconds – Rince Thomas Mar 26 '15 at 07:25

6 Answers6

20

In your case, using your example you could use something like the following:

String time = "02:30"; //mm:ss
String[] units = time.split(":"); //will break the string up into an array
int minutes = Integer.parseInt(units[0]); //first element
int seconds = Integer.parseInt(units[1]); //second element
int duration = 60 * minutes + seconds; //add up our values

If you want to include hours just modify the code above and multiply hours by 3600 which is the number of seconds in an hour.

CodeCamper
  • 6,609
  • 6
  • 44
  • 94
4
public class TimeToSeconds {
    // given: mm:ss or hh:mm:ss or hhh:mm:ss, return number of seconds.
    // bad input throws NumberFormatException.
    // bad includes:  "", null, :50, 5:-4
    public static long parseTime(String str) throws NumberFormatException {
        if (str == null)
            throw new NumberFormatException("parseTimeString null str");
        if (str.isEmpty())
            throw new NumberFormatException("parseTimeString empty str");

        int h = 0;
        int m, s;
        String units[] = str.split(":");
        assert (units.length == 2 || units.length == 3);
        switch (units.length) {
            case 2:
                // mm:ss
                m = Integer.parseInt(units[0]);
                s = Integer.parseInt(units[1]);
                break;

            case 3:
                // hh:mm:ss
                h = Integer.parseInt(units[0]);
                m = Integer.parseInt(units[1]);
                s = Integer.parseInt(units[2]);
                break;

            default:
                throw new NumberFormatException("parseTimeString failed:" + str);
        }
        if (m<0 || m>60 || s<0 || s>60 || h<0)
            throw new NumberFormatException("parseTimeString range error:" + str);
        return h * 3600 + m * 60 + s;
    }

    // given time string (hours:minutes:seconds, or mm:ss, return number of seconds.
    public static long parseTimeStringToSeconds(String str) {
        try {
            return parseTime(str);
        } catch (NumberFormatException nfe) {
            return 0;
        }
    }

}


import org.junit.Test;

import static org.junit.Assert.*;

public class TimeToSecondsTest {

    @Test
    public void parseTimeStringToSeconds() {

        assertEquals(TimeToSeconds.parseTimeStringToSeconds("1:00"), 60);
        assertEquals(TimeToSeconds.parseTimeStringToSeconds("00:55"), 55);
        assertEquals(TimeToSeconds.parseTimeStringToSeconds("5:55"), 5 * 60 + 55);
        assertEquals(TimeToSeconds.parseTimeStringToSeconds(""), 0);
        assertEquals(TimeToSeconds.parseTimeStringToSeconds("6:01:05"), 6 * 3600 + 1*60 + 5);
    }

    @Test
    public void parseTime() {
        // make sure all these tests fail.
        String fails[] = {null, "", "abc", ":::", "A:B:C", "1:2:3:4", "1:99", "1:99:05", ":50", "-4:32", "-99:-2:4", "2.2:30"};
        for (String t: fails)
        {
            try {
                long seconds = TimeToSeconds.parseTime(t);
                assertFalse("FAIL: Expected failure:"+t+" got "+seconds, true);
            } catch (NumberFormatException nfe)
            {
                assertNotNull(nfe);
                assertTrue(nfe instanceof NumberFormatException);
                // expected this nfe.
            }
        }
    }


}
bhlowe
  • 418
  • 4
  • 8
2
int v = 0;
for (var x: t.split(":")) {
    v = v * 60 + new Byte(x);
}

This snippet should support HH:MM:SS (v would result in seconds) or HH:MM (v would be in minutes)

Sameer Khan
  • 637
  • 6
  • 15
1

try this

hours = totalSecs / 3600;
minutes = (totalSecs % 3600) / 60;
seconds = totalSecs % 60;

timeString = String.format("%02d",seconds);
likith sai
  • 527
  • 1
  • 6
  • 21
0
private static final String TIME_FORMAT = "hh:mm a";//give whatever format you want.

//Function calling
long timeInMillis = TimeUtils.getCurrentTimeInMillis("04:21 PM");
long seconds = timeInMillis/1000;

//Util Function
public static long getCurrentTimeInMillis(String time) {
    SimpleDateFormat sdf = new SimpleDateFormat(TIME_FORMAT, Locale.getDefault());
    //        sdf.setTimeZone(TimeZone.getTimeZone("GMT")); //getting exact milliseconds at GMT
    //        sdf.setTimeZone(TimeZone.getDefault());
    Date date = null;
    try {
        date = sdf.parse(time);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return date.getTime();
}
Naresh Palle
  • 339
  • 3
  • 8
0

I have written an extension function in Kotlin for converting String to seconds

fun String?.converTimeToSeconds(): Int {
if (this.isNullOrEmpty().not()) {
    val units = this?.split(":")?.toTypedArray() 
    if (units?.isNotEmpty() == true && units.size >= 3) {
        val hours = units[0].toInt()
        val minutes = units[1].toInt()
        val seconds = units[2].toInt()
        return (3660 * hours) + (60 * minutes) + seconds 
    }

}
return 0

}

Ameer
  • 2,709
  • 1
  • 28
  • 44