Timo Kessler
2005-03-05 17:40:01 UTC
Hallo,
ich habe hier zwei Uhrzeiten als String vorliegen, die ich voneinander
abziehen möchte. Das Ergebnis soll dann wieder ein String sein.
das hier ist die Ausgangszeit (die ms sind nicht wichtig und können
abgeschnitten werden, wenns ginge würde ich die aber auch gerne mit
beachten):
10:05:08,078
das hier muss abgezogen werden:
00:04:31
damit dann das hier raus kommen:
10:05:08 - 00:04:31 = 10:00:37
Wie mache ich das am besten?
Habe mich mal mit folgendem Code probiert, aber damit kann ich nur die
Uhrzeiten erstellen. Wie aber Differenz ausrechnen? Muss auch
funktionieren beim Überschreiten von Mitternacht / Tageswechsel.
String timestamp = "10:05:08";
String diffTime = "00:04:31";
SimpleDateFormat format = new SimpleDateFormat("hh:mm:ss");
Date uhrzeit = format.parse(timestamp);
Date diff = format.parse(diffTime);
System.out.println("Uhrzeit: " + uhrzeit.toString());
System.out.println("Validierung: " + diff.toString());
-----------------------------
So nachdem ich keine funktionierende Lösung mit richtigen
Date/Time-Formaten finden konnte habe ich eine Lösung basierend auf der
reinen Stringzerlegung geschrieben. Nur irgendwie graut es mir vor deren
produktivem Einsatz ;-)
Das Format vom String mit z.B. "23:59:59" ist aber fest vorgegeben. Da
kann nciht ein anderes Zeitformat auftauchen. Also aus dieser Sicht
sollte meine Lösung schon sicher sein.
//kann keine Zeitdifferenz von ueber einem Tag berechnen
private String transformStartTime(String timeStamp, String val1)
{
String[] time = timeStamp.split(":");
String[] elapsed = val1.split(":");
final int secondsTimeStamp = Integer.parseInt(time[0]) * 3600 +
Integer.parseInt(time[1]) * 60 + Integer.parseInt(time[2]);
//System.out.println(secondsTimeStamp);
final int secondsVal1Start = Integer.parseInt(elapsed[0]) *
3600 + Integer.parseInt(elapsed[1]) * 60 + Integer.parseInt(elapsed[2]);
//System.out.println(secondsVal1Start);
int start = secondsTimeStamp - secondsVal1Start;
String returnString = null;
//Unterscheidung ob die neue Zeit negativ ist, wenn ja wurde
die 24h Schwelle ueberschritten
if(start > 0)
{
int hours = start / 3600;
start = start % 3600;
int minutes = start / 60;
start = start % 60; //enthaelt jetzt die restlichen Sekunden
if(hours < 10)
{
returnString = "0" + hours + ":";
}
else
{
returnString = hours + ":";
}
if(minutes < 10)
{
returnString = returnString + "0" + minutes + ":";
}
else
{
returnString = returnString + minutes + ":";
}
if(start < 10)
{
returnString = returnString + "0" + start;
}
else
{
returnString = returnString + start;
}
}
else if(start == 0)
{
returnString = "00:00:00";
}
else//Startzeitpunkt ist vor 00:00:00, Timestamp danach
{
System.out.println("kleiner Mitternacht");
start = Math.abs(start); //Sekunden vor Mitternacht
int hours = start / 3600;
start = start % 3600;
int minutes = start / 60;
start = start % 60; //enthaelt jetzt die restlichen Sekunden
//Endwerte
hours = 24 - hours;
minutes = 60 - minutes;
start = 60 - start;
if(hours < 10)
{
returnString = "0" + hours + ":";
}
else
{
returnString = hours + ":";
}
if(minutes < 10)
{
returnString = returnString + "0" + minutes + ":";
}
else
{
returnString = returnString + minutes + ":";
}
if(start < 10)
{
returnString = returnString + "0" + start;
}
else
{
returnString = returnString + start;
}
}
return returnString;
}
Gruß
Timo
ich habe hier zwei Uhrzeiten als String vorliegen, die ich voneinander
abziehen möchte. Das Ergebnis soll dann wieder ein String sein.
das hier ist die Ausgangszeit (die ms sind nicht wichtig und können
abgeschnitten werden, wenns ginge würde ich die aber auch gerne mit
beachten):
10:05:08,078
das hier muss abgezogen werden:
00:04:31
damit dann das hier raus kommen:
10:05:08 - 00:04:31 = 10:00:37
Wie mache ich das am besten?
Habe mich mal mit folgendem Code probiert, aber damit kann ich nur die
Uhrzeiten erstellen. Wie aber Differenz ausrechnen? Muss auch
funktionieren beim Überschreiten von Mitternacht / Tageswechsel.
String timestamp = "10:05:08";
String diffTime = "00:04:31";
SimpleDateFormat format = new SimpleDateFormat("hh:mm:ss");
Date uhrzeit = format.parse(timestamp);
Date diff = format.parse(diffTime);
System.out.println("Uhrzeit: " + uhrzeit.toString());
System.out.println("Validierung: " + diff.toString());
-----------------------------
So nachdem ich keine funktionierende Lösung mit richtigen
Date/Time-Formaten finden konnte habe ich eine Lösung basierend auf der
reinen Stringzerlegung geschrieben. Nur irgendwie graut es mir vor deren
produktivem Einsatz ;-)
Das Format vom String mit z.B. "23:59:59" ist aber fest vorgegeben. Da
kann nciht ein anderes Zeitformat auftauchen. Also aus dieser Sicht
sollte meine Lösung schon sicher sein.
//kann keine Zeitdifferenz von ueber einem Tag berechnen
private String transformStartTime(String timeStamp, String val1)
{
String[] time = timeStamp.split(":");
String[] elapsed = val1.split(":");
final int secondsTimeStamp = Integer.parseInt(time[0]) * 3600 +
Integer.parseInt(time[1]) * 60 + Integer.parseInt(time[2]);
//System.out.println(secondsTimeStamp);
final int secondsVal1Start = Integer.parseInt(elapsed[0]) *
3600 + Integer.parseInt(elapsed[1]) * 60 + Integer.parseInt(elapsed[2]);
//System.out.println(secondsVal1Start);
int start = secondsTimeStamp - secondsVal1Start;
String returnString = null;
//Unterscheidung ob die neue Zeit negativ ist, wenn ja wurde
die 24h Schwelle ueberschritten
if(start > 0)
{
int hours = start / 3600;
start = start % 3600;
int minutes = start / 60;
start = start % 60; //enthaelt jetzt die restlichen Sekunden
if(hours < 10)
{
returnString = "0" + hours + ":";
}
else
{
returnString = hours + ":";
}
if(minutes < 10)
{
returnString = returnString + "0" + minutes + ":";
}
else
{
returnString = returnString + minutes + ":";
}
if(start < 10)
{
returnString = returnString + "0" + start;
}
else
{
returnString = returnString + start;
}
}
else if(start == 0)
{
returnString = "00:00:00";
}
else//Startzeitpunkt ist vor 00:00:00, Timestamp danach
{
System.out.println("kleiner Mitternacht");
start = Math.abs(start); //Sekunden vor Mitternacht
int hours = start / 3600;
start = start % 3600;
int minutes = start / 60;
start = start % 60; //enthaelt jetzt die restlichen Sekunden
//Endwerte
hours = 24 - hours;
minutes = 60 - minutes;
start = 60 - start;
if(hours < 10)
{
returnString = "0" + hours + ":";
}
else
{
returnString = hours + ":";
}
if(minutes < 10)
{
returnString = returnString + "0" + minutes + ":";
}
else
{
returnString = returnString + minutes + ":";
}
if(start < 10)
{
returnString = returnString + "0" + start;
}
else
{
returnString = returnString + start;
}
}
return returnString;
}
Gruß
Timo