Android Java:如何减去两次?

时间:2010-08-18 17:03:10

标签: java android timer subtraction

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

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

我需要来自final time = stop - start

这两个值的结果

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

有没有简单的解决方案?

5 个答案:

答案 0 :(得分:27)

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

答案 1 :(得分:12)

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

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

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

答案 2 :(得分:0)

尝试此答案将对您有很大帮助

来自here

在此答案中,您将发现两次减去了日,月和年。

它提供了直到达到第二个“时间”值所花费的分钟数。

答案 3 :(得分:0)

我正在提供现代的答案。

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日期和时间API java.time更好用。

但是它不需要API级别26吗?

否,使用java.time可以在旧的和更新的Android设备上很好地工作。它只需要至少 Java 6

  • 在Java 8和更高版本以及更新的Android设备(API级别26以上)中,内置了现代API。
  • 在非Android Java 6和7中,获得ThreeTen Backport,这是现代类的backport(ThreeTen for JSR 310;请参阅底部的链接)。
  • 在(较旧的)Android上,使用Android版本的ThreeTen Backport。叫做ThreeTenABP。并确保您使用子包从org.threeten.bp导入日期和时间类。

链接

答案 4 :(得分:0)

今天,使用更新的Java(不知道,它适用于哪种Android版本):

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

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

过去的笨拙的Java方式现在消失了。