如何获得A时间和B时间之间的差距?

时间:2016-05-19 10:15:13

标签: java date parsing simpledateformat

我希望两个视频的持续时间差距包含毫秒。

A:01:18:19.92,B:01:18:19.57

public String calTime(String A, String B) {

  String sFormat = "HH:mm:ss.SSS";
  SimpleDateFormat dFormat = new SimpleDateFormat(sFormat);

  try {

    Date A1 = dFormat.parse(A);
    Date A2 = dFormat.parse(B);

    //A1 = Thu Jan 01 01:18:19 KST 1970
    //A1.getTime() = -27700943
    //A2 = Thu Jan 01 01:18:19 KST 1970
    //A2.getTime() = -27701000

    System.out.println(A1.getTime() - A2.getTime());

  } catch (ParseException ex) {}

}
  1. 为什么来自getTime()的值为负数?因为我没有定义yy-MM-dd Date方法?

  2. 我可以使用Date方法获得和HH:mm:ss.SSS这样的计算持续时间吗?我不需要年,月,日等。

  3. 我怎么能正常两个持续时间的差距?

2 个答案:

答案 0 :(得分:3)

  

为什么会出现减去getTime()值的前端?因为我没有定义yy-MM-dd Date方法?

因为日期是1970年1月1日午夜之前 GMT 。你显然处于GMT + XX:XX时区,所以尽管他们在1970年之后的时区,他们还没有参加GMT。

  

因为我没有定义yy-MM-dd Date方法?

是的,间接的。 SimpleDateFormat假设格林尼治标准时间1970年1月1日午夜,如果没有日期部分。

  

我可以使用日期方法得到和计算持续时间如HH:mm:ss.SSS吗?

Java的原始Date对象不是很有用。 JDK 8在java.time包中添加了更多有用的类,包括Duration

  

我怎么能正常两个持续时间的差距?

这就是您的代码目前正在做的事情。它以毫秒为单位获得间隔(间隙)。这是一个正数,因为你正在做A - B,A比B晚。如果需要,你可以通过Duration.ofMillis将这个数字转换为Duration

long interval = A1.getTime() - A2.getTime();
System.out.println("interval in ms: " + interval);
Duration d = Duration.ofMillis(interval);
System.out.println("duration: " + d);

Live Example

...虽然只是为了格式化它不会给你带来太大的影响,但我没有立即在java.time.format中看到格式为DurationTemporalAmount的任何内容。

答案 1 :(得分:0)

java.time.Duration

从Java 8开始: 为什么不使用Duration.between(Temporal startInclusive, Temporal endExclusive)

Duration tempDuration = Duration.between(A1.toInstant(), A2.toInstant());
System.out.println(tempDuration.toMillis());

https://docs.oracle.com/javase/8/docs/api/java/time/Duration.html

  

如果第一个日期在第二个日期之后,结果可能是负数。

     

也可以使用LocalTime代替日期