2016-10-13 1 views
0

Ich versuche, die Zeit differente zwischen zwei Zeit vars wie dieseErhalten Zeitdifferenz java.sql.Time

long timeDiffLong = hFim.getTime() - hInic.getTime(); 
Time timeDiff = new Time(timeDiffLong); 

Der Ausgang ist comming so etwas wie dies

hFim = 17:30:00 
hInic = 17:00:00 
timeDiff = 20:30:00 

statt nur zu erhalten zeige 00:30:00 ich bekomme immer 20h plus das Ergebnis

+0

Was ist der Wert von 'timeDiffLong' in diesem Fall, und wie konstruierst du' hFim' und 'hInic'? A [mcve] hier würde es einfacher machen, Ihnen zu helfen. –

+0

Mögliches Duplikat von [Wie berechnet man den Unterschied zwischen zwei java.sql.Time-Werten?] (Http://stackoverflow.com/questions/25847798/how-to-calculate-the-difference-between-two-java-sql -time-values) – Unknown

Antwort

1

Wenn Sie Java verwenden 8 können Sie tun:

LocalTime from = hFim.toLocalTime(); 
LocalTime to = hInic.toLocalTime(); 

Duration d = Duration.between(from, to); 

Sie können dann fragen Sie die Stunde/Minute usw. mit z.B. d.toMinutes().

2

dieses

Time timeDiff = new Time(timeDiffLong); 

machen Sie eine neue Zeit ein Objekt erstellen, mit timeDiffLong die Millisekunden ist seit 1970-01-01 00:00 UTC. Da die Differenz 30 Minuten beträgt, bezieht sich das Objekt Time auf 1970-01-01 00:30 UTC. Aber hier kommt der Haken: timeDiff.toString() wird die Zeit in der Standardzeitzone ausgeben, das ist in den meisten Fällen die Zeitzone, in der Sie sich gerade befinden.

Lange Rede, kurzer Sinn: Erzwinge kein Intervall (Dauer, Zeitdifferenz) in ein Time Objekt. Verwenden Sie entweder eine Klasse (Joda hat eine) oder führen Sie die Divisions- und Modulo-Berechnungen selbst durch, wie von Kushan vorgeschlagen.

0

Ihr Problem ist, dass, wenn Sie die Zeit diff mit

Time timeDiff = new Time(timeDiffLong); 

und Ausgang schaffen, dass mit System.out.println(timeDiff) dann das Ergebnis für Ihre lokale Zeitzone gezeigt. Sie können sehen, dass, wenn Sie dies tun:

System.out.println(new Time(0)); 
TimeZone.setDefault(TimeZone.getTimeZone("PST")); 
System.out.println(new Time(0)); 

, dass die folgende Ausgabe hier erzeugt

00:00:00 //will probably be 20:00:00 for you 
16:00:00 

Kurz gesagt: Ihre Zeitdifferenz als ein GMT-Datum zu Ihrer Zeitzone umgewandelt gezeigt wird, und das ist warum seine mehrere Stunden frei.

Verwandte Themen