【问题标题】:Converting mm:ss to only seconds (java)将 mm:ss 转换为仅秒 (java)
【发布时间】:2021-09-11 07:50:47
【问题描述】:

我当前项目的一部分是将 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,因为它读取“:”。

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

【问题讨论】:

  • 1:30 是 90 秒...也是String.split()
  • 那么在子串索引中加一?
  • 编辑到90,以为我写的是2:30。
  • 如何将一个添加到索引中?我试过“+1”但没有运气。
  • 错误是因为您使用 3 作为索引,在 1:30 的情况下它可以是 2

标签: java string time integer seconds


【解决方案1】:

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

java.time.Duration

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

一段时间内的 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 对象的原样可能会使您的代码更加不言自明。

链接

【讨论】:

    【解决方案2】:
    int sec = Integer.parseInt(time.substring(time.indexOf(':') + 1), time.length()));
    

    谢谢大家!

    【讨论】:

      【解决方案3】:

      这里我已经简化了你的代码。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-09
        • 2014-07-26
        • 2021-01-14
        • 1970-01-01
        • 2021-07-03
        • 2012-05-09
        • 2019-10-05
        • 2012-01-27
        相关资源
        最近更新 更多