2016-05-19 69 views
0

我想得到兩個視頻的持續時間差距包含毫秒。我該如何獲得時間和B時間之間的差距?

答: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. 我可以通過日期方法獲得和計算持續時間,如HH:mm:ss.SSS嗎?我不需要年,月,日等。

  3. 我怎麼能兩個持續時間的正常差距?

回答

3

爲什麼出現的getTime()值減去前面?因爲我沒有定義yy-MM-dd Date方法?

因爲日期在1970年1月1日午夜之前GMT。您顯然處於GMT + XX:XX時區,因此雖然他們在1970年之後,但他們不在格林威治標準時間。

原因我沒有定義yy-MM-dd Date方法嗎?

是,間接。如果沒有日期部分,SimpleDateFormat假定1970年1月1日午夜。

我可以使用Date方法獲得和計算持續時間,如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中格式爲Duration s或TemporalAmount s的任何內容。

+0

謝謝Crowder真的很好回答!!我會嘗試使用Duration.ofMillis :) – ofleaf

+0

的確,package java.time.format中沒有持續時間格式化程序。爲此,人們必須編寫自己的解決方法(並非總是很容易)或使用外部庫。 –

相關問題