我需要在两个日期之间获得时间。我们来说dateStart = 1470712122173
和dateStop = 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);
}
感谢您的解释。
答案 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
的答案。因此,当您计算两个日期之间的差异时,不应将差异转换回日期实例。