我如何将这次的时间:“ 9:7.110”转换为“ 09:07.110”?

时间:2019-12-15 18:32:46

标签: java time time-format

我的程序获取两个时间值并将其相减。

减法后的结果有时可能是这样的(分钟:秒。毫秒):

9:7.110

但是我希望我的程序再打印一个(如果分钟,秒或毫秒只包含一个数字,则在此数字之前打印零的所有内容:

09:07.110

也许是这样的格式:

DateTimeFormatter formatterForResultedPrinting = DateTimeFormatter.ofPattern("mm:ss.SSS");

我这次存储:

9:7.110

在字符串中。

3 个答案:

答案 0 :(得分:0)

首先使用m:s.SSS进行 parse ,然后使用mm.ss.SSS进行 format

String in = "9:7.110";
String out = DateTimeFormatter.ofPattern("mm:ss.SSS").format(DateTimeFormatter.ofPattern("m:s.SSS").parse(in));

答案 1 :(得分:0)

您有一个String,而您想要的输出也是一个String。为什么不使用如下所示的简单String函数创建自己的函数?

public class Main {

    public static void main(String[] args) {
        try {
            System.out.println(convert("09:07.110"));
            System.out.println(convert("9:07.110"));
            System.out.println(convert("09:7.1"));
            System.out.println(convert("9:07.11"));
            System.out.println(convert("9:7a.110"));
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

    static String convert(String str) throws IllegalArgumentException {
        String mm = str.substring(0, str.indexOf(":"));
        String ss = str.substring(str.indexOf(":") + 1, str.indexOf("."));
        String mil = str.substring(str.indexOf(".") + 1);
        if (mm.length() == 0 || mm.length() > 2 || ss.length() == 0 || ss.length() > 2 || mil.length() == 0
                || mil.length() > 3 || !mm.matches("[0-9]+") || !ss.matches("[0-9]+") || !mil.matches("[0-9]+")) {
            throw new IllegalArgumentException("Invalid time string");
        }
        mm = mm.length() == 1 ? "0" + mm : mm;
        ss = ss.length() == 1 ? "0" + ss : ss;
        mil = mil.length() == 1 ? "00" + mil : (mil.length() == 2 ? "0" + mil : mil);
        return mm + ":" + ss + "." + mil;
    }
}

输出:

09:07.110
09:07.110
09:07.001
09:07.011
Invalid time string

答案 2 :(得分:0)

java.time的持续时间

使用Duration类以小时,分钟,秒和/或秒为单位的时间量。

    String differenceString = "9:7.110";

    String differenceIsoString = differenceString
            .replaceFirst("^(\\d{1,2}):(\\d{1,2}.\\d{3})$", "PT$1M$2S");
    Duration difference = Duration.parse(differenceIsoString);

    String diffStringWithZeroes
            = String.format("%02d:%02d.%03d", difference.toMinutes(),
                    difference.toSecondsPart(), difference.toMillisPart());
    System.out.println("Difference: " + diffStringWithZeroes);

这给出了您要求的输出:

  

差异:09:07.110

Duration.parse()解析ISO 8601格式的时间。看起来像PT9M7.110S。读取时间为9分钟7.110秒。因此,我们首先使用正则表达式将您的字符串转换为这种格式。为了将持续时间格式化为更易于阅读的格式,我们使用String.format()

链接