ERLEDIGT
JA
JA
ANTWORTEN
8
8
ZUGRIFFE
11311
11311
EMPFEHLEN
-
06.03.06 16:37 #1
- Registriert seit
- Nov 2005
- Beiträge
- 70
Hi,
ich wollte gern mal eine Laufzeitmessung meines Programmes machen. Folgender Code Brocken zeigt die wichtigsten Zeilen.
Code :1 2 3 4 5 6 7 8 9 10 11
long startTime = System.currentTimeMillis(); while(run) { //irgendwas tuhen long timeNow = System.currentTimeMillis(); long diff = timeNow-startTime; SimpleDateFormat sdfTime = new SimpleDateFormat(); sdfTime.applyPattern("HH:mm:ss"); System.out.println(sdfTime.format(diff));
Wenn ich jetzt das Programm laufen lassen und nach ein paar Sekunden die Messung gemacht wird, dann ist die Ausgabe folgende. 01:00:21.
Wie kommt da die Differenz von über eine Stunde hin?(Programm läuft nicht so lange)
Die TimeZome ist korrekt eingestellt. Wenn ich mir die Variable diff mal ausgebe, dann stimmt auch das Ergebnis. Also muss der Fehler bei SimpleDateFormat liegen.
Ich hoffe das einer mir helfen kann.
-
Das Problem liegt darin, dass du eine Zeitdifferenz mit einer Klasse formatieren willst, die eigentlich mit Zeitpunkten arbeitet. Schreib dir am besten einfach eine eigene Funktion, die dir eine Anzahl von Millisekunden in Stunden, Minuten und Sekunden umrechnet.
„Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
“For every complex problem, there is an answer that is short, simple and wrong.”
“Pessimism is safe, but optimism is a lot faster!”
Aktuelles Coding Quiz: #17 - Wörter kreuz und quer
-
06.03.06 17:33 #3
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo!
...das ist alles eine Frage der "richtigen" Zeitzone:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
/** * */ package de.tutorials; import java.text.SimpleDateFormat; import java.util.TimeZone; /** * @author Tom * */ public class TimeDiff { /** * @param args */ public static void main(String[] args) throws Exception { long time = -System.currentTimeMillis(); Thread.sleep(1500L); time += System.currentTimeMillis(); TimeZone.setDefault(TimeZone.getTimeZone("GMT")); SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss:SSS"); System.out.println(sdf.format(time)); } }
Gruss TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
06.03.06 20:35 #4
- Registriert seit
- Nov 2005
- Beiträge
- 70
Genau das war das Problem. Folgende Zeile hat gefehlt.
Code :1
TimeZone.setDefault(TimeZone.getTimeZone("GMT"));
Dank für die schnelle Hilfe.
-
Hi,
Ich habe ein ähnliches Problem und habe den Thread über die Suchfunktion gefunden.
Leider funktioniert das bei mir aber nicht.
Wieso nicht?
Fehlermeldung in Eclipse:Code :1
System.out.println(sdf.format(time));
The method format(Date, StringBuffer, FieldPosition) in the type SimpleDateFormat is not applicable for the arguments (long)
Gruß und so
Loki2
-
08.03.06 12:56 #6
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo!
Das klappt natuerlich nur dann mit primitiven longs , wenn diese in die Wrapper Klassen Gehuellt werden, oder das Autoboxing von Java 5 zum tragen kommt.
Als Alternative koenntest du mal folgendes versuchen:
Code :1 2 3
System.out.println(sdf.format(Long.valueOf(time))); System.out.println(sdf.format(new Date(time)));
Gruss TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
So funktioniert es.
Vielen Dank.
-
13.10.08 14:20 #8
- Registriert seit
- Feb 2005
- Ort
- 127.0.0.1
- Beiträge
- 189
Hallo zusammen.
Ich greife den Thread einfach noch mal auf. Ich komme an einer Stelle nicht weiter.
Ich möchte eine Methode haben, die mir die Anzahl der Jahre, Monate, Tage, usw. ausgibt.
Folgendes habe ich bereits:
Wie bekomme ich jetzt einen aussagekräftigen Rückgabewert hin, wie bspw.:Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
public static String getZeitZwischenZweiZeitangaben(Calendar timestamp1, Calendar timestamp2) { String zeitraum = ""; long time = 0; if(timestamp1.getTimeInMillis() > timestamp2.getTimeInMillis()) time = timestamp1.getTimeInMillis() - timestamp2.getTimeInMillis(); else time = timestamp2.getTimeInMillis() - timestamp1.getTimeInMillis(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy:MM:d:HH:mm:ss:SSS"); zeitraum = "Differenz: " + sdf.format(Long.valueOf(time)); return zeitraum; }
Die Millisekunden sind nicht wichtigDifferenz: 0 Jahre, 2 Monate, 3 Tage, 4, Stunden, 5 Miniuten und 6 Sekunden
Danke schon mal für eure Hilfe!
Gruß
der Gerrit
-
14.10.08 08:55 #9
- Registriert seit
- Feb 2005
- Ort
- 127.0.0.1
- Beiträge
- 189
Guten Morgen.
Möchte euch meine Lösung nicht vorenthalten.
Habe mir diese Lib zur Hilfe besorgt: http://joda-time.sourceforge.net/faq.html#datediff
Der Code schaut dann (bis jetzt) so aus:
Vielleicht hilft das ja einem von euchCode :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
/** * Ermittelt die Zeitspanne zwischen zwei Zeitpunkten.<br /> * <br /> * Ist <code>timestamp1<code> kleiner als <code>timestamp2</code>, wird das Ergebnis negativ. * * @param timestamp1 * @param timestamp2 * @return Zeitspanne */ public static String getZeitZwischenZweiZeitangaben(Calendar timestamp1, Calendar timestamp2) { Period p = new Period(timestamp1.getTimeInMillis(), timestamp2.getTimeInMillis(), PeriodType.yearMonthDayTime()); StringBuffer sb = new StringBuffer("Differenz: "); boolean setSep = false; if(p.getYears() != 0) { sb.append(p.getYears() + " Jahr"); if(Math.abs(p.getYears()) > 1) sb.append("e"); setSep = true; } if(p.getMonths() != 0) { if(setSep) { sb.append(", "); } sb.append(p.getMonths() + " Monat"); if(Math.abs(p.getMonths()) > 1) sb.append("e"); setSep = true; } if(p.getDays() != 0) { if(setSep) { sb.append(", "); } sb.append(p.getDays() + " Tag"); if(Math.abs(p.getDays()) > 1) sb.append("e"); setSep = true; } if(p.getHours() != 0) { if(setSep) { sb.append(", "); } sb.append(p.getHours() + " Stunde"); if(Math.abs(p.getHours()) > 1) sb.append("n"); setSep = true; } if(p.getMinutes() != 0) { if(setSep) { sb.append(", "); } sb.append(p.getMinutes() + " Minute"); if(Math.abs(p.getMinutes()) > 1) sb.append("n"); setSep = true; } if(p.getSeconds() != 0) { if(setSep) { sb.append(", "); } sb.append(p.getSeconds() + " Sekunde"); if(Math.abs(p.getSeconds()) > 1) sb.append("n"); setSep = true; } return sb.toString(); }
Gruß
der Gerrit
Ähnliche Themen
-
[C++] Zeitmessung in Millisekunden
Von Jellysheep im Forum C/C++Antworten: 9Letzter Beitrag: 01.06.10, 23:11 -
Zeitmessung in Mulitthreadanwendung
Von Perdan im Forum C/C++Antworten: 2Letzter Beitrag: 26.11.09, 10:52 -
Zeitmessung
Von CodeFatal im Forum C/C++Antworten: 7Letzter Beitrag: 06.01.06, 08:18 -
Timer (zur Zeitmessung)
Von Svartr im Forum Borland CBuilder und VCLAntworten: 3Letzter Beitrag: 02.04.05, 13:45 -
Simple Zeitmessung für Kundenaufträge
Von fercules im Forum Microsoft WindowsAntworten: 0Letzter Beitrag: 08.10.04, 10:27





Zitieren


Login





