我如何将这次:“9:7.110”转换为“09:07.110”?
How can I convert this time : "9:7.110" to "09:07.110"?
我的程序获取两个时间值并相减。
有时减法后的结果可能是这样的(分:秒.毫秒):
9:7.110
但我希望我的程序打印另一个(如果分钟、秒或毫秒只包含一个数字,则在该数字之前打印零:
09:07.110
也许是这样的格式:
DateTimeFormatter formatterForResultedPrinting = DateTimeFormatter.ofPattern("mm:ss.SSS");
我这次收藏了:
9:7.110
在字符串中。
首先 parse 与 m:s.SSS
,然后 format 与 mm.ss.SSS
:
String in = "9:7.110";
String out = DateTimeFormatter.ofPattern("mm:ss.SSS").format(DateTimeFormatter.ofPattern("m:s.SSS").parse(in));
你得到了一个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
持续时间从 java.time
对于以小时、分钟、秒为单位的时间量 and/or 秒的分数使用 Duration
class.
String differenceString = "9:7.110";
String differenceIsoString = differenceString
.replaceFirst("^(\d{1,2}):(\d{1,2}.\d{3})$", "PTMS");
Duration difference = Duration.parse(differenceIsoString);
String diffStringWithZeroes
= String.format("%02d:%02d.%03d", difference.toMinutes(),
difference.toSecondsPart(), difference.toMillisPart());
System.out.println("Difference: " + diffStringWithZeroes);
这给出了您要求的输出:
Difference: 09:07.110
Duration.parse()
解析 ISO 8601 格式的时间量。看起来像 PT9M7.110S
。读作 9 分 7.110 秒 的时间段。因此,我们首先使用正则表达式将您的字符串转换为这种格式。为了将持续时间格式化回更易于阅读的格式,我们使用 String.format()
.
链接
我的程序获取两个时间值并相减。
有时减法后的结果可能是这样的(分:秒.毫秒):
9:7.110
但我希望我的程序打印另一个(如果分钟、秒或毫秒只包含一个数字,则在该数字之前打印零:
09:07.110
也许是这样的格式:
DateTimeFormatter formatterForResultedPrinting = DateTimeFormatter.ofPattern("mm:ss.SSS");
我这次收藏了:
9:7.110
在字符串中。
首先 parse 与 m:s.SSS
,然后 format 与 mm.ss.SSS
:
String in = "9:7.110";
String out = DateTimeFormatter.ofPattern("mm:ss.SSS").format(DateTimeFormatter.ofPattern("m:s.SSS").parse(in));
你得到了一个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
持续时间从 java.time
对于以小时、分钟、秒为单位的时间量 and/or 秒的分数使用 Duration
class.
String differenceString = "9:7.110";
String differenceIsoString = differenceString
.replaceFirst("^(\d{1,2}):(\d{1,2}.\d{3})$", "PTMS");
Duration difference = Duration.parse(differenceIsoString);
String diffStringWithZeroes
= String.format("%02d:%02d.%03d", difference.toMinutes(),
difference.toSecondsPart(), difference.toMillisPart());
System.out.println("Difference: " + diffStringWithZeroes);
这给出了您要求的输出:
Difference: 09:07.110
Duration.parse()
解析 ISO 8601 格式的时间量。看起来像 PT9M7.110S
。读作 9 分 7.110 秒 的时间段。因此,我们首先使用正则表达式将您的字符串转换为这种格式。为了将持续时间格式化回更易于阅读的格式,我们使用 String.format()
.