2017-05-02 3 views
1

Gibt es eine Möglichkeit, den genauen Zeitunterschied zwischen zwei Zeiten zu berechnen.Wie berechne ich den Zeitunterschied in Java?

Für. z.B.

t1= 11:18 
t2= 20:20 
t2 - t1 = 9.02 

Ich habe diesen Code versucht, aber es hilft nicht.

String hour1=h1+":"+m1; 
String hour2= h2+":"+m2; 
SimpleDateFormat dateFormat=new SimpleDateFormat("HH:mm"); 
Date d1= dateFormat.parse(hour1); 
Date d2= dateFormat.parse(hour2); 
long d=d2.getTime()-d1.getTime(); 
long hour= d/(60*60*1000) % 24; 

Mit diesem Code kann ich die Minuten Differenz nicht finden.

+4

Nun du hast Code habe die Stunden zu arbeiten ...Was hast du * für die Minuten versucht? (Tipp: teile nicht so oft durch 60 ...) –

+0

Warte, du hast deine Zeit in 'h1':' m1' und 'h2':' m2' also warum benutzt du diesen Wert nicht, um zu tun Die Mathematik ? – AxelH

+0

gut ich versuchte und bekam die Mathematik falsch an der ersten Stelle @AxelH, deshalb auf dieses Format – Saurabh

Antwort

1

Ich habe den folgenden Code verwendet, um in eine andere Zeitzone zu konvertieren und den Zeitunterschied zu überprüfen. Sie könnten die Zeit in Millisekunden erfassen und die Werte vergleichen, die ich für Ihren Fall unten angegeben habe. Subtrahieren Sie timeInMillisTwo von timeInMillisOne.

Date date = dateFormat.parse(""); 
Calendar cal = Calendar.getInstance(); // that is NOW for the timezone configured on the computer. 

long timeInMillis = cal.getTimeInMillis(); 
cal.setTimeInMillis(timeInMillis + (60000 * 60 * 5) - (60000 * 15)); 
//the line above converts to a different time zone and subtracts fifteen 
//minutes. 
long fifteenMinutesAgo = cal.getTime(); 

if(date.after(fifteenMinutesAgo)){ 
    //do something 
} 
+0

Danke :) Ich werde diesen Code versuchen. – Saurabh

0

Dies funktioniert möglicherweise.

package cn.sz.cyrus.java8test; 

public class TimeCalcute { 

    public static String calcTime(String time1, String time2) { 
     String[] times1 = time1.split(":"); 
     String[] times2 = time2.split(":"); 
     int timeint1 = Integer.valueOf(times1[0]) * 60 + Integer.valueOf(times1[1]); 
     int timeint2 = Integer.valueOf(times2[0]) * 60 + Integer.valueOf(times2[1]); 
     int interval = timeint1 - timeint2; 
     String result = String.format("%d:%02d", interval/60, interval % 60); 
     return result; 
    } 

    public static void main(String[] args) { 
     String time1 = "20:20"; 
     String time2 = "11:18"; 
     System.out.println(calcTime(time1, time2)); 
     time1 = "22:46"; 
     time2 = "10:59"; 
     System.out.println(calcTime(time1, time2)); 
    } 

} 

Dies ist Drucker:

9:02

11:47

0

Sie die Differenz zwischen zwei Daten als millisecondes bekommen können, dann können Sie es auf Minuten oder Stunden umwandeln

,
public static Long getDateDiff(Date date1, Date date2, TimeUnit timeUnit) { 
     long diffInMillies = date1.getTime() - date2.getTime(); 
     return diffInMillies; 
    } 

public static void main(String[] args) throws IOException { 
    double value= Test.getDateDiff(new Date(System.currentTimeMillis()+37*10000), new Date(System.currentTimeMillis()), TimeUnit.MINUTES); 
    System.out.println("Hour:"+value/(100*60*60)); 

}

2

JDK 8 Datum Zeit API vereinfacht diese können Zeitdifferenzen als unter Verwendung von Dauer berechnet werden:

LocalTime t1 = LocalTime.of(11, 18); 
LocalTime t2 = LocalTime.of(20, 20); 
System.out.println(Duration.between(t1, t2)); //output - PT9H2M 

Der Ausgang ist 9 Stunden und 2 Minuten. (9H 2M)

1

Sie hatten es fast. Um Minuten zu berechnen, die Sie gerade benötigt haben.

long minutes = d/(60*1000) % 60; 
long seconds = d/1000 % 60; 

Ich habe die Sekunden nur für den Fall hinzugefügt. Obwohl ich die Antwort von @ Pallavi irgendwie mochte, benutzte ich Duration, aber es war etwas komplizierter, die tatsächlichen Daten aus dem resultierenden Objekt zu ziehen.

1

können Sie JodaTime verwenden, wenn Sie nicht JDK 8 verwenden, aber mit JDK 8 Sie so etwas schreiben kann:

public static void main(String[] args) { 
    LocalDateTime from = LocalDateTime.of(2017, 2, 5, 11, 18, 0); 
    LocalDateTime to = LocalDateTime.of(2017, 2, 5, 20, 20, 0); 

    long seconds = ChronoUnit.SECONDS.between(from, to); 
    System.out.println(String.format("%d:%02d:%02d", seconds/3600, (seconds % 3600)/60, (seconds % 60))); 
} 

Der Ausgang wird sein: 9:02:00

Um die Differenz zwischen zwei Local könnten Sie die Dauer Klasse verwenden, aber es gibt keine Formatierer für die es in JDK 8, so dass, wenn Sie dieses spezielle Ausgabeformat benötigen, dann werden Sie entweder eine 3rd-Party-Bibliothek verwenden oder eigene Formatter schreiben wie die oben im Beispiel.

Um eine Dauer verwenden Sie schreiben können:

public static void main(String[] args) { 
    LocalDateTime from = LocalDateTime.of(2017, 2, 5, 11, 18, 0); 
    LocalDateTime to = LocalDateTime.of(2017, 2, 5, 20, 20, 0); 

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

    long seconds = duration.getSeconds(); 
    System.out.println(String.format("%d:%02d:%02d", s/3600, (s % 3600)/60, (s % 60))); 
} 

Cheers, A.

Verwandte Themen