java 在Android中将字符串格式的给定时间转换为秒

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/29272905/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-11-02 14:58:25  来源:igfitidea点击:

Convert given time in String format to seconds in Android

javaandroid

提问by Sritam Jagadev

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.

假设时间以字符串格式以 MM:SS(ex- 02:30) 或 HH:MM:SS 给出。我们如何将此时间转换为秒。

回答by CodeCamper

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.

如果您想包括小时,只需修改上面的代码并将小时乘以 3600,即一小时的秒数。

回答by bhlowe

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.
            }
        }
    }


}

回答by Sameer Khan

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)

此代码段应支持 HH:MM:SS(v 表示秒)或 HH:MM(v 表示分钟)

回答by Naresh Palle

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

回答by likith sai

try this

试试这个

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

timeString = String.format("%02d",seconds);