Wartezeit in Minuten?

Salohcin

Mitglied
Guten Tag!

Ich wollte mal fragen wie ihr nach Systemzeit einen Zeitstempel setzen würdet, welchen ihr dann nachher mit der aktuellen Zeit subtrahieren könnt, sodass ich den Abstand zwischen den Zeitpunken in Minuten wiedergegeben bekommen kann.

Mein Ansatz war mit date und daraus resultierenden float werten zu arbeiten, aber mit denen lässt sicht das ganze nicht so einfach in int umformen bzw. es kommt gar kein sinnvoller Wert heraus.

Mfg Saloh
 
Ich benutze für sowas System.nanoTime(). Nicht wegen der Genauigkeit, die der Name suggeriert - Nein, die beträgt meistens trotzdem nur ein paar Hundert Mikrosekunden. Der Grund für die Verwendung ist ein anderer:

System.currentTimeMillis() gibt die aktuelle Uhrzeit des Systems zurück. Diese ist aber nicht stabil - unter UNIX-Systemen läuft zum Beispiel ein NTP-Daemon, der die Zeit ständig mit Zeitserver abgleicht, wodurch die Uhr alle paar Minuten um ein paar Millisekunden geändert werden kann. Auch Situationen wie manuelle Verstellung der Systemzeit oder die Umstellung auf Sommer-/Winterzeit sorgen für falsche Ergebnisse.

System.nanoTime() hat diese Probleme nicht, weil es gar nicht die tatsächliche Uhrzeit zurückgeben will, sondern sich auf irgendeinen implementierungsabhängigen Referenzpunkt bezieht, der aber stabil ist - ein einzelner Wert ansich ist also nutzlos, dafür sind Differenzen zwischen zwei Messungen stabil. Diese Methode ist speziell für Zeitmessungen vorgesehen, während currentTimeMillis eher eine Variante ist, die aktuelle Uhrzeit zu bekommen.
 
Zuletzt bearbeitet:
Ich hatte da so einen ähnlichen Ansatz allerdings sind die Werte immer unsinnig (arbeite hier mit Blue J --> warte ein paar Sekunden, dann aktivier ich zweitZeit(); und kurz drauf diffToSecs()😉:
Java:
public class nanoTime
{
    // instance variables - replace the example below with your own
    long x;
    long y;
    long t;
    long minuten;
    long stunden;
    /**
     * Constructor for objects of class nanoTime
     */
    public nanoTime()
    {
        x = System.nanoTime();
    }
    
    public void zweitZeit()
    {
        y = System.nanoTime();
    }
    
    public void difToSecs()
    {
        x = x/1000/1000/1000;
        y = y/1000/1000/1000;
        long t = y-x; 
        t = t/1000/1000/1000;//sek
        minuten = t/60;
        stunden = minuten/60;
    }
}
Saloh
 
Du rechnest in difToSecs x und y von Nanosekunden in Sekunden um, bildest die Differenz, die dann natürlich auch in Sekunden ist - und wandelst dann nochmal um, obwohl es bereits Sekunden sind? Das Ergebnis dürfte dann immer 0 sein, weil long keine Kommazahlen abbilden kann und du vermutlich nicht länger als 1000 * 1000 * 1000 Sekunden gewartet hast 😉

Also: Erst Differenz bilden, dann teilen. (y - x) / (1000 * 1000 * 1000). Am besten in double rechnen und 1000.0 nehmen, dann hast du auch Nachkommastellen 🙂
 
Du rechnest in difToSecs x und y von Nanosekunden in Sekunden um, bildest die Differenz, die dann natürlich auch in Sekunden ist - und wandelst dann nochmal um, obwohl es bereits Sekunden sind? Das Ergebnis dürfte dann immer 0 sein, weil long keine Kommazahlen abbilden kann und du vermutlich nicht länger als 1000 * 1000 * 1000 Sekunden gewartet hast 😉

Also: Erst Differenz bilden, dann teilen. (y - x) / (1000 * 1000 * 1000). Am besten in double rechnen und 1000.0 nehmen, dann hast du auch Nachkommastellen 🙂

Danke! 😀
 
Mal ein Beispiel:
Java:
		long start = System.nanoTime();
		Thread.sleep(2000);
		long end = System.nanoTime();
		
		long difference = end - start;
		System.out.println("Milli Sek: " + 	(difference/ (1000L * 1000L)));
		System.out.println("Seconds: " + 	(difference/ (1000L * 1000L * 1000L)));
		System.out.println("Minutes: " + 	(difference/ (1000L * 1000L * 1000L * 60L)));
 

Neue Themen


Zurück
Oben