我的程序获取两个时间值并将其相减。
减法后的结果有时可能是这样的(分钟:秒。毫秒):
9:7.110
但是我希望我的程序再打印一个(如果分钟,秒或毫秒只包含一个数字,则在此数字之前打印零的所有内容:
09:07.110
也许是这样的格式:
DateTimeFormatter formatterForResultedPrinting = DateTimeFormatter.ofPattern("mm:ss.SSS");
我这次存储:
9:7.110
在字符串中。
答案 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)
使用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()
。