两个日期之间的差异(Android)

时间:2016-08-09 03:16:04

标签: java android date-arithmetic

我需要在两个日期之间获得时间。我们来说dateStart = 1470712122173dateStop = 1470712127320。 这两个日期之间的差异等于5147 所以,据此我希望得到答案= 5秒,但我看到19:00:05。这19个小时来自哪里?

代码毫秒(= 5147) - >时间:

private string foo(long dateStart, long dateStop) {
    long diff = dateStop - dateStart;
    DateFormat simple = SimpleDateFormat.getTimeInstance(); 
    Date date = new Date(diff); 
    return simple.format(date);
}

感谢您的解释。

3 个答案:

答案 0 :(得分:4)

您需要正确理解基本概念。当你在两个Date对象之间取得差异时,你得到两个时间点之间的持续时间,试图查看差异,因为另一个时间点没有意义。

以下是使用Java 8时间API获取两个时间点(java.time.Instant)之间差异的示例:

import java.time.Duration;
import java.time.Instant;

public class TimeDifferenceSample {

    static Duration diff(Instant start, Instant end) {
        return Duration.between(start, end);
    }

    public static void main(String [] args) {
        long start = 1470712122173L;
        long end = 1470712127320L;

        Duration dur = diff(Instant.ofEpochMilli(start), Instant.ofEpochMilli(end));
        System.out.println(dur.getSeconds() + " seconds");
    }
}

输出:

5 seconds

对于Android,我不是专家,但您可以查看提供类似功能的The Joda Time Project。我还找到了Android verion here

答案 1 :(得分:2)

    Date date = new Date(5147);
   //this method has deprecation, just for illustration
    System.out.println(date.getSeconds());

 //in java 8 this works
        LocalDateTime ldate1 = LocalDateTime.ofInstant(Instant.ofEpochMilli(1470712122173l), ZoneId.systemDefault());
        LocalDateTime ldate2 = LocalDateTime.ofInstant(Instant.ofEpochMilli(1470712127320l), ZoneId.systemDefault());

        System.out.println(Duration.between(ldate1, ldate2).getSeconds());

答案 2 :(得分:1)

您也可以使用java.util.concurrent.TimeUnit

<强>输出

0 : 0 : 5

<强>代码

import java.util.concurrent.TimeUnit;

public class HelloWorld {

    public static void main(String[] args) {
        long dateStart = 1470712122173l, dateStop = 1470712127320l;
        long diff = dateStop - dateStart;

        long diffInSeconds = TimeUnit.MILLISECONDS.toSeconds(diff);
        long diffInMinutes = TimeUnit.MILLISECONDS.toMinutes(diff);
        long diffInHours = TimeUnit.MILLISECONDS.toHours(diff);

        System.out.println(diffInHours + " : " + diffInMinutes + " : " + diffInSeconds);
    }
}

当你计算两个日期实例之间的差异时,你真的得到差异秒。我们假设你得到30 seconds作为差异。

现在,如果您将此30 seconds再次转换为date实例(12小时)格式,那么您将得到12 hr 00 minutes 30 seconds PM的答案。因此,当您计算两个日期之间的差异时,不应将差异转换回日期实例。