13

我在我的项目中使用了某种秒表,我有

start time ex: 18:40:10 h
stop time  ex: 19:05:15 h

我需要这两个值的结果,例如final time = stop - start

我发现了一些例子,但它们都非常令人困惑。

有没有简单的解决方案?

4

5 回答 5

32

如果您有字符串,则需要使用 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 以获得秒的小数部分。

于 2010-08-18T17:20:39.927 回答
13

假设您正在使用java.util.Date

long totalTime = endDate.getTime() - startDate.getTime();

结果将是总时间(以毫秒为单位)。

于 2010-08-18T17:12:47.227 回答
1

我正在提供现代答案。

java.time 和 ThreeTenABP

    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 年的好答案。今天避免上课DateFormatSimpleDateFormatDate。java.time 是现代 Java 日期和时间 API,使用起来非常好用。

但它不需要 API 级别 26 吗?

不,使用 java.time 在较旧和较新的 Android 设备上运行良好。它只需要至少Java 6

  • 在 Java 8 及更高版本以及更新的 Android 设备(从 API 级别 26 开始)中,现代 API 是内置的。
  • 在非 Android Java 6 和 7 中获得 ThreeTen Backport,现代类的后向端口(ThreeTen 用于 JSR 310;请参阅底部的链接)。
  • 在(较旧的)Android 上使用 ThreeTen Backport 的 Android 版本。它被称为 ThreeTenABP。并确保从org.threeten.bp子包中导入日期和时间类。

链接

于 2019-10-08T05:58:22.300 回答
0

试试这个答案,它会对你有很大帮助

这里

在这个答案中,您会发现减去两次,丢弃了日、月和年。

它为您提供在达到第二个时间值之前您将花费的分钟数。

于 2018-12-22T08:28:28.607 回答
0

今天,使用较新的 Java(不知道,在哪个 Android 版本上可以使用):

Instant before = Instant.now();
// do stuff

Duration.between(before, Instant.now()).getSeconds()

过去笨拙的 Java 方式现在已经不复存在。

于 2020-01-17T15:38:43.973 回答