2017-03-18 2 views
0

Ich habe eine Methode, die zwei String-Parameter dauert. Die zwei Zeichenfolgen sind Zeitwerte im 24-Stunden-Format. Die Zeiten werden mit einem TimePicker von der Benutzeroberfläche ausgewählt. Das Ziel der Methode ist es, die Dauer zwischen StartTime und EndTime in Minuten zu erhalten.Der Unterschied zwischen zwei Zeiten in Minuten kommen als negative

public static String getTimeDuration(String StartTime24, String EndTime24) 
{ 
    String duration = ""; 

    try 
    { 
     SimpleDateFormat parseFormat = new SimpleDateFormat("HH:mm"); 
     Date startTime = parseFormat.parse(StartTime24); 
     Date endTime = parseFormat.parse(EndTime24); 

     long mills = endTime.getTime() - startTime.getTime(); 
     long minutes = mills/(1000 * 60); 

     duration = "(" + minutes + " Minutes)"; 
    } 
    catch(ParseException ex) 
    { 
     // exception handling here 
    } 

    return duration; 
} 

Die Methode funktioniert einwandfrei, wenn beide Zeiten innerhalb eines einzelnen Datums liegen. Zum Beispiel:

StartTime = 22:15 
EndTime = 23:51 
Output = (96 Minutes) 

Aber mein Problem ist, gibt die Methode negativ, wenn die Endzeit nach 12'o Uhr in der Nacht ist. Zum Beispiel

StartTime = 23:51 
EndTime = 0:55 
Output = (-1376 Minutes) 
What I want: (64 Minutes) 

Wie kann die Dauer korrekt sein?

Antwort

1

Da kein Datum verwendet wird Sie müssen zuerst überprüfen, ob Ihr endTime kleiner ist als Ihr startTime. Wenn ja, dann ist Ihr endTime am nächsten Tag und Sie müssen 1 Tag/86 400 000 Millisekunden hinzufügen. Dann haben Sie Ihr gewünschtes Ergebnis.

Fügen Sie einfach diesen Zustand:

if(endTime.getTime() < startTime.getTime()){ 

    long mills = ((endTime.getTime() + 86400000) - startTime.getTime()); 1 day = 86 400 000 mill 

} 

Hope this

+1

perfekt hilft! danke – BuggyCoder

+0

Gern geschehen :) – tahsinRupam

0

Sie analysieren nur die Minuten und Stunden. Es gibt keinen Tag dort. Das setzt beide Male am selben Tag ein (der erste Tag der Epoche, der 1. Januar 1970, um genau zu sein). Die Antwort ist also richtig. Wenn Sie möchten, dass die Endzeit als nächster Tag behandelt wird, wenn sie früher als die Startzeit ist, fügen Sie 1 Tag zum Ergebnis hinzu (1440 Minuten), wenn das Ergebnis kleiner als 0 ist.

Verwandte Themen