将 mm:ss 转换为仅秒 (java)

时间:2021-06-29 05:17:51

标签: java string time integer seconds

我当前项目的一部分是将 mm:ss 转换为秒...但用户可以选择输入 x:xx 或 xx:xx。

例如,如果有人想在程序中输入一分三十秒,他们可以选择将其写为“01:30”或“1:30”。两者的输出都是 90 秒。

这是我当前的代码。

System.out.print("Time (mm:ss): ")

String time = scan.nextLine(); 
        int min = Integer.parseInt(time.substring(0, time.indexOf(':'))) * 60;
        int sec = Integer.parseInt(time.substring(3, time.length()));
        int duration = (min + sec);
    
        System.out.println("Seconds: " + duration)

每当我输入 xx:xx 时它都会工作,但当我输入 x:xx 时它会失败。

我不知道如何只读取 ":" 之后的字符。如果我从“:”开始子字符串(我现在在 3 处),它不能转换为 int,因为它读取的是“:”。

我在谷歌和我的教科书上找遍了,但没有找到任何东西。我假设我只是使用了错误的技术。代码需要保持在基本初学者 String 方法的参数范围内。谢谢!

3 个答案:

答案 0 :(得分:1)

这个答案可能不符合要求的基本初学者 String 方法的参数。我认为这对没有相同限制的其他读者会很有用。

java.time.Duration

Duration 类是用于 1 分 30 秒等时间量的类。不幸的是,Duration 类只能解析 ISO 8601 格式的字符串(下面的链接),但是使用正则表达式进行字符串转换并不难。幸运的是,在 ISO 8601 格式中,前导零无关紧要。 Duration 类是 java.time(现代 Java 日期和时间 API)的一部分。

持续时间的 ISO 8601 格式类似于 PT01M30S。将其视为 01 分 30 秒的时间段。如果格式一开始感觉不寻常,那就很简单了。所以让我们转换它。以下方法接受您用户的格式,转换并返回 Duration

public static Duration parseDuration(String durStr) {
    String isoString = durStr.replaceFirst("^(\\d{1,2}):(\\d{2})$", "PT$1M$2S");
    return Duration.parse(isoString);
}

Duration 有一个 toSeconds 转换为秒的方法。所以让我们尝试一下:

    System.out.println(parseDuration("01:30").toSeconds());
    System.out.println(parseDuration("1:30").toSeconds());

输出是预期的:

<块引用>
90
90

不过,请考虑是否需要转换为秒。保持 Duration 对象的原样可能会使您的代码更易于解释。

链接

答案 1 :(得分:0)

int sec = Integer.parseInt(time.substring(time.indexOf(':') + 1), time.length()));

谢谢各位!

答案 2 :(得分:0)

这里我简化了你的代码。

String time = "1:30";
String[] timeUnit = time.split(":");
int totalSeconds = 60 * Integer.parseInt(timeUnit[0]) + Integer.parseInt(timeUnit[1]);
System.out.println("Seconds "+totalSeconds);