Wie kann ich Zeit stoppen in Java?



  • Ich möchte ein paar Algorithmen benchen, dazu bräuchte ich jedoch eine Möglichkeit vor und nach dem Algorithmus die Zeit auszulesen, in Millisekunden würde schon ausreichen. Ich habe nach "java timer/date/time" usw. gegoogelt, aber ich konnte nichts brauchbares finden, bin zwar ein paar mal auf die Date Klasse gestoßen, aber ich sehe da nicht wie ich zwei Date Objekte voneinander abziehen kann um die vergangene Zeit zu bestimmen.

    Für so eine alltägliche Aufgabe muss es doch was geben in der Java API, oder?



  • Kennst du die Java API Dokumentation? Schau dir dort mal die Klasse System an, da gibts Methoden für so was.



  • Danke, für die schnelle Antwort, scheinbar ist nanoTime() genau das was ich suche, zu Überläufen dürfte es da ja nicht so schnell kommen wenn ich mir die Doku anschaue. Meine Testdurchläufe werden maximal 15min benötigen, dann sollte das ja kein Problem sein, oder?



  • Ich weiss nicht ob nanoTime dafür wirklich geeignet ist. currentTimeInMillis wird eher verwendet.



  • CengizS schrieb:

    Ich weiss nicht ob nanoTime dafür wirklich geeignet ist.

    Begündung?



  • Wie gesagt, ist 'nen Bauchgefühl. nanoTime suggeriert eine super Genauigkeit, die es womöglich gar nicht gibt.



  • CengizS schrieb:

    Wie gesagt, ist 'nen Bauchgefühl. nanoTime suggeriert eine super Genauigkeit, die es womöglich gar nicht gibt.

    Das kann gut sein, denn in der Doku steht ja, dass zwar Nanosekunden zurückgebenen werden, aber weder eine Garantie für die Genauigkeit noch für die Änderungsrate des Timers gegeben werden.
    Ich bin jetzt auf Milisekunden gewechselt, damit kann man auch ohne Umrechnung mehr anfangen 🙂



  • beispiel:

    public class StoppUhr {
    
        private long startZeit;
        private boolean laeuft;
    
        public StoppUhr() {
            laeuft = false;
            startZeit = 0;
        }
    
        public void start() {
            startZeit = System.currentTimeMillis();
            laeuft = true;
        }
    
        public long stopp() {
            if(laeuft) {
                laeuft = false;
                return  System.currentTimeMillis() - startZeit;
            } else {
                return 0;
            }
        }
    }
    

    verwendung: du erzeugst eine instanz der stoppuhr und rufst .start() auf. wenn du dann .stopp() aufrufst, liefert dir die methode stopp die anzahl der vergangenen millisekunden


Anmelden zum Antworten