2016-05-19 3 views
0

Ich möchte die Dauern Lücke von zwei Videos erhalten Millisekunden enthalten.Wie kann ich die Lücke zwischen A time und B time bekommen?

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. Warum sind die Werte von getTime() negativ? Weil ich JJ-MM-TT die Date-Methode nicht definiert habe?

  2. Kann ich die Dauer der Berechnung wie HH: mm: ss.SSS mit der Date-Methode ermitteln? Ich brauche kein Jahr, Monat, Tag usw.

  3. Wie kann ich normale Lücke von zwei Dauern?

Antwort

3

Warum minus vor getTime() Werte erscheinen? Weil ich JJ-MM-TT die Date-Methode nicht definiert habe?

Da die Daten sind vor 1. Januar 1970 um Mitternacht GMT . Sie befinden sich eindeutig in einer GMT + XX: XX-Zeitzone. Obwohl sie nach 1970 in dieser Zeitzone sind, sind sie nicht in GMT.

Ursache Ich habe nicht JY-MM-dd die Date-Methode definiert?

Ja, indirekt. SimpleDateFormat geht von Mitternacht 1. Januar 1970 GMT aus, wenn es keinen Datumsteil gibt.

Kann ich Dauer wie HH: mm: ss.SSS mit Datum Methode bekommen und berechnen?

Javas ursprüngliches Date Objekt ist nicht sehr nützlich. JDK 8 fügt das java.time Paket mit nützlicheren Klassen hinzu, einschließlich Duration.

Wie kann ich normale Lücke von zwei Dauern?

Das ist, was Ihr Code gerade macht. Es wird das Intervall (Lücke) in Millisekunden erhalten. Es ist eine positive Zahl, weil Sie ein tun - B und A später als B. können Sie drehen sich diese Zahl in eine Duration über Duration.ofMillis falls gewünscht:

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

... obwohl nur zum Formatieren es nicht kaufen Sie viel, ich bin nicht sofort etwas in java.time.format, dass Formate Duration s oder TemporalAmount s sehen.

+0

Danke Crowder wirklich gute Antwort !!. Ich werde versuchen mit Duration.ofMillis :) – ofleaf

+0

In der Tat, keine Dauer Formatierer im Paket 'java.time.format'. Zu diesem Zweck müssen die Leute ihre eigenen Workarounds schreiben (nicht immer einfach) oder externe Bibliotheken benutzen. –