我希望两个视频的持续时间差距包含毫秒。
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) {}
}
为什么来自getTime()
的值为负数?因为我没有定义yy-MM-dd Date方法?
我可以使用Date方法获得和HH:mm:ss.SSS这样的计算持续时间吗?我不需要年,月,日等。
我怎么能正常两个持续时间的差距?
答案 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);
...虽然只是为了格式化它不会给你带来太大的影响,但我没有立即在java.time.format
中看到格式为Duration
或TemporalAmount
的任何内容。
答案 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
代替日期