好的,所以,我只是想不通,无需尝试执行任何花哨的操作,您可以使用 Java 8 日期/时间 API,它提供了计算两个时间点之间差异的功能.
因此,接受您的输入,并通过下面的代码运行它,它会输出
2018-03-02T15:44:41.194
2018-03-02T15:44:41.198
0.004
现在,就个人而言,我会采用这个概念并简单地创建一个 DurationFormatter,它可以采用 Duration 并吐出您所需的格式,但这里的想法是为您提供一个起点。
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class Test {
public static void main(String[] args) {
String startTime = "2018-03-02 15:44:41.194";
String endTime = "2018-03-02 15:44:41.198";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
LocalDateTime startDateTime = LocalDateTime.parse(startTime, formatter);
LocalDateTime endDateTime = LocalDateTime.parse(endTime, formatter);
System.out.println(startDateTime);
System.out.println(endDateTime);
Duration duration = Duration.between(startDateTime, endDateTime);
long hours = duration.toHours();
duration = duration.minusHours(hours);
long mins = duration.toMinutes();
duration = duration.minusMinutes(mins);
long secs = duration.getSeconds();
duration = duration.minusSeconds(secs);
long millis = duration.toMillis();
StringBuilder sb = new StringBuilder(12);
if (hours > 0) {
sb.append(pad(hours, 2));
}
if (mins == 0 && sb.length() > 0) {
sb.append(":00");
} else if (mins > 0) {
if (hours > 0) {
sb.append(":");
}
sb.append(pad(mins, 2));
}
if (secs == 0 & sb.length() > 0) {
sb.append(":00");
} else if (secs > 0) {
if (mins > 0) {
sb.append(":");
}
sb.append(pad(secs, 2));
}
if (millis == 0 & sb.length() > 0) {
sb.append(".00");
} else if (millis > 0) {
if (secs > 0 || sb.length() > 0) {
sb.append(".");
} else if (sb.length() == 0) {
sb.append("0.");
}
sb.append(pad(millis, 3));
}
System.out.println(sb.toString());
}
public static String pad(long value, long length) {
return String.format("%0" + length + "d", value);
}
}
现在,如果我们将输入更改为...
String startTime = "2018-03-02 15:44:41.194";
String endTime = "2018-03-08 15:44:41.198";
输出
144:00:00.004
或者如果我们使用
String startTime = "2018-03-02 15:44:41.194";
String endTime = "2018-03-08 15:15:41.198";
输出
143:31:00.004
或者
String startTime = "2018-03-02 15:44:41.194";
String endTime = "2018-03-08 15:15:50.198";
输出
143:31:09.004
或者
2018-03-02T15:44:41.194
2018-03-02T15:50:41.194
输出
06:00.00
...对我来说,这就是它变得奇怪的地方,技术上它是正确的(6 分钟),但从格式来看,很难准确推断出它的含义
在这里我可能会想使用更像String.format("%02d:%02d:%02d.%04d", hours, mins, secs, millis) 的东西,它会输出00:06:00.0000,但这一切都满足你的需要。您需要决定如何最好地获取原始信息并根据您的需要呈现它,但有几个不同的想法