我想获取两个视频的持续时间间隔(包含毫秒)。
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 等持续时间吗?我不需要年、月、日等。
如何才能正常间隔两个持续时间?
最佳答案
Why appear minus front of getTime() values? Cause I didn't define yy-MM-dd the Date method?
因为日期是 1970 年 1 月 1 日午夜GMT之前。显然您处于 GMT+XX:XX 时区,因此尽管该时区的时间是 1970 年之后,但它们并不是 GMT。
Cause I didn't define yy-MM-dd the Date method?
是的,间接的。如果没有日期部分,SimpleDateFormat
假定格林尼治标准时间 1970 年 1 月 1 日午夜。
Can I get and calculation durations like HH:mm:ss.SSS using Date method?
Java 原始的 Date
对象并不是很有用。 JDK 8 添加了 java.time
包含更多有用的类的包,包括 Duration
.
how can I normal gap of two durations?
这就是您的代码当前正在执行的操作。它以毫秒为单位获取间隔(间隙)。这是一个正数,因为您正在执行 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
。
关于java - 如何获取A时间和B时间之间的差距?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37320244/