2016-05-19 1 views
0

ミリ秒を含む2つのビデオの期間ギャップを取得したい。A時間とB時間との間にどのようにギャップを設けることができますか?

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つの期間の通常のギャップができますか?

答えて

3

なぜgetTime()の値のマイナス前面に表示されますか?私はyy-MM-dd Dateメソッドを定義していないのですか?

日付は真夜中GMTで月1日1970年の前にあるため。あなたは明らかにGMT + XX:XXタイムゾーンにいるので、そのタイムゾーンでは1970年以降になっていますが、GMTにはありません。

原因私はyy-MM-ddにDateメソッドを定義していませんでしたか?

はい、間接的です。 SimpleDateFormatは、日付部分がない場合、GMT 1970年1月1日の真夜中とみなします。

Dateメソッドを使用してHH:mm:ss.SSSのような計算時間を取得できますか?

JavaのオリジナルDateオブジェクトはあまり役に立ちません。 JDK 8は、Durationを含むjava.timeパッケージに、より有益なクラスを追加しました。

どのように私は2つの期間の通常のギャップができますか?

これはあなたのコードが現在行っていることです。間隔(ギャップ)がミリ秒単位で取得されています。

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

を...ちょうどかかわら:必要に応じて、あなたがDuration.ofMillis経由Durationにその数を変えることができますB、およびAはBよりも後である - あなたがやっているので、それは正の数です書式設定ではあまり買わないので、DurationまたはTemporalAmountの形式のjava.time.formatのものはすぐに表示されません。

+0

ありがとうクラウダー本当に良い答え!! Duration.ofMillisを試してみます:) – ofleaf

+0

実際、 'java.time.format'パッケージのデュレーションフォーマッタはありません。その目的のために、人々は自分の回避策(必ずしも容易ではない)を書くか、外部ライブラリを使用する必要があります。 –

関連する問題