我在我的项目中使用了某种秒表,我有
start time ex: 18:40:10 h
stop time ex: 19:05:15 h
我需要这两个值的结果,例如final time = stop - start
我发现了一些例子,但它们都非常令人困惑。
有没有简单的解决方案?
我在我的项目中使用了某种秒表,我有
start time ex: 18:40:10 h
stop time ex: 19:05:15 h
我需要这两个值的结果,例如final time = stop - start
我发现了一些例子,但它们都非常令人困惑。
有没有简单的解决方案?
如果您有字符串,则需要使用 java.text.SimpleDateFormat 将它们解析为 java.util.Date。就像是:
java.text.DateFormat df = new java.text.SimpleDateFormat("hh:mm:ss");
java.util.Date date1 = df.parse("18:40:10");
java.util.Date date2 = df.parse("19:05:15");
long diff = date2.getTime() - date1.getTime();
这里的 diff 是 18:40:10 到 19:05:15 之间经过的毫秒数。
编辑1:
为此在线找到了一种方法(在http://www.javaworld.com/javaworld/jw-03-2001/jw-0330-time.html?page=2):
int timeInSeconds = diff / 1000;
int hours, minutes, seconds;
hours = timeInSeconds / 3600;
timeInSeconds = timeInSeconds - (hours * 3600);
minutes = timeInSeconds / 60;
timeInSeconds = timeInSeconds - (minutes * 60);
seconds = timeInSeconds;
编辑2:
如果你想要它作为一个字符串(这是一种草率的方式,但它有效):
String diffTime = (hours<10 ? "0" + hours : hours) + ":" + (minutes < 10 ? "0" + minutes : minutes) + ":" + (seconds < 10 ? "0" + seconds : seconds) + " h";
编辑 3:
如果您想要毫秒,请执行此操作
long timeMS = diff % 1000;
然后,您可以将其除以 1000 以获得秒的小数部分。
我正在提供现代答案。
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("H:mm:ss 'h'");
String startTimeString = "18:40:10 h";
String stopTimeString = "19:05:15 h";
LocalTime startTime = LocalTime.parse(startTimeString, timeFormatter);
LocalTime stopTime = LocalTime.parse(stopTimeString, timeFormatter);
if (stopTime.isBefore(startTime)) {
System.out.println("Stop time must not be before start time");
} else {
Duration difference = Duration.between(startTime, stopTime);
long hours = difference.toHours();
difference = difference.minusHours(hours);
long minutes = difference.toMinutes();
difference = difference.minusMinutes(minutes);
long seconds = difference.getSeconds();
System.out.format("%d hours %d minutes %d seconds%n", hours, minutes, seconds);
}
此示例的输出为:
0 小时 25 分 5 秒
其他答案是 2010 年的好答案。今天避免上课DateFormat
,SimpleDateFormat
和Date
。java.time 是现代 Java 日期和时间 API,使用起来非常好用。
不,使用 java.time 在较旧和较新的 Android 设备上运行良好。它只需要至少Java 6。
org.threeten.bp
子包中导入日期和时间类。java.time
第一次描述的地方。java.time
Java 6 和 7 的反向移植(ThreeTen for JSR-310)。今天,使用较新的 Java(不知道,在哪个 Android 版本上可以使用):
Instant before = Instant.now();
// do stuff
Duration.between(before, Instant.now()).getSeconds()
过去笨拙的 Java 方式现在已经不复存在。