Zeit messen

  • 25 Antworten
  • Letztes Antwortdatum
P

paxis

Fortgeschrittenes Mitglied
0
Hallihallo,

nach langem googlen, finde ich keine Antwort auf meine Frage und hoffe nun von euch Rat bekommen zu können ;)!
Ich würde einfach nur gerne die Zeit messen, mit meiner Methode per System.currentTimeMillis() funktioniert es nicht....!

Ich würde gerne die Zeit die der User für einen Zeitabschnitt braucht messen, damit ich es später für ein Spielergebniss benutzen kann!

Könnte mir wer da vielleicht nen kleinen Schubser geben? :D

danke

paxis
 
Du speicherst die Zeit als Long vor der Ausführung mit dem von dir genannten Befehl. Nach der Ausführung subtrahiert du von der aktuellen Zeit den gespeicherten Long Wert und du hast die zeitdifferenz in MS.

Gesendet von meinem LG-P880 mit der Android-Hilfe.de App
 
Ich mach es immer mit einem Timer:
Code:
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

Timer t = new Timer();

t.scheduleAtFixedRate(new TimerTask()
{
public void run()
{
new Runnable()
{
//Dass was du willst hier rein
}
}, 0, 1);
}
}

Der Timer würde jetzt jede Millisekunde durchlaufen, den Wert wie schnell er läuft änderst du bei der 1, bei 1000 wäre es 1 sek bei 10000 10 sek u.s.w
Mfg
 
Mit new Date() bekommst Du das aktuelle Datum. Dazu schau Dir noch die Calendar-Klasse an:

Calendar c = Calendar.getInstance();

Damit solltest Du zum gewünschten Ergebnis kommen.

Viele Grüße
 
TheEvilOne schrieb:
Mit new Date() bekommst Du das aktuelle Datum. Dazu schau Dir noch die Calendar-Klasse an:

Calendar c = Calendar.getInstance();

Damit solltest Du zum gewünschten Ergebnis kommen.

Viele Grüße


Danke für deinen Rat! Ich habe mein Programm dementsprechend umgeschrieben, aber komme auf falsche ergebnisse!
Hier ein kleiner Auszug, der das Problem vedeutlichen sollte:

Code:
public long getZeit(){
    Calendar cl = Calendar.getInstance();
    long Rückgabe;
    long Stunde=cl.get(Calendar.HOUR)-Anfangszeitstunde;
    long Minute=cl.get(Calendar.MINUTE)-Anfangszeitminute;
    long Sekunde=cl.get(Calendar.SECOND)-Anfangszeitsekunde;
    long Millisekunde=cl.get(Calendar.MILLISECOND)-Anfangszeitmillisekunde;
    if (Minute==0){
         Rückgabe=(Stunde*3600000)+(Minute*60000)+ (Sekunde*1000)+(Millisekunde);
    }else{
        if(Minute==1){
         Rückgabe= Stunde*3600000+(Minute-1)*60000+((60-Anfangszeitsekunde)*1000)+(cl.get(Calendar.SECOND)*1000)+Millisekunde;
    }else{
        Rückgabe= Stunde*3600000+Minute*60000+((60-Anfangszeitsekunde)*1000)+(cl.get(Calendar.SECOND)*1000)+Millisekunde;
    }
    }
    return Rückgabe;
    
}

AnfangszeitX wird am Anfang halt mit der gleichen Methode abgefragt! Eigentlich sollte diese Abfrage die richtige Zeit in Millisekunden liefern, aber wenn ich sie später mit dieser Methode in einer anderen Klasse abfrage per:
Game.getZeit()/1000 um die Sekunden zu bekommen, erhalte ich viel zu hohe Werte! ((game ist die Klasse))

Jemand ne Idee, woran das liegen könnte?

Den anderen Vorschlägen danke ich auch vielmals :)
 
Mit

Code:
Long millisekunden = System.currentTimeMillis();
bekommst du die zeit in millisekunden die seit dem 1. January 1970 vergangen sind.

Frage halt zum Anfang und zum Ende deiner Funktion die Millisekunden ab und subtrahiere die werte von einander und du erhältst die verstrichenen Millisekunden.
Musst du dann nur noch in das Format bringen was du brauchst.

Gruß
derjens
 
Zuletzt bearbeitet:
damit funktioniert es bei mir nicht.... Ich weiß auch nicht wieso...
 
Was genau funktioniert da nicht?
Hab's gerade mal getestet und funktioniert genau so wie es soll.

Gruß
derjens
 
Ich hatte diese Variante bereits gestestet, so habe ich am Anfang eine Variable festgelegt und am Ende halt auch. Nur bei der Subtraktion war die erste Variable immer null!

Ich schreibe mal meinen Code um, vielleicht funktioniert es ja doch!
Funktioniert immer noch nicht, hier ein Ausschnitt:
Code:
public class GameLayout extends Activity {
 
   long aktuelleZeit;
   long Endzeit=0;
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
         [..]
        Anfangszeit=System.currentTimeMillis();
        this.starteSpiel();
      
        
}
    public void starteSpiel(){
      [..]
        
        

public long getZeit(){
    long Rückgabe=System.currentTimeMillis()-Anfangszeit;
    
    /*Calendar cl = Calendar.getInstance();
    long Stunde=cl.get(Calendar.HOUR)-Anfangszeitstunde;
    long Minute=cl.get(Calendar.MINUTE)-Anfangszeitminute;
    long Sekunde=cl.get(Calendar.SECOND)-Anfangszeitsekunde;
    long Millisekunde=cl.get(Calendar.MILLISECOND)-Anfangszeitmillisekunde;
    if (Minute==0){
         Rückgabe=(Stunde*3600000)+(Minute*60000)+ (Sekunde*1000)+(Millisekunde);
    }else{
        if(Minute==1){
         Rückgabe= Stunde*3600000+(Minute-1)*60000+((60-Anfangszeitsekunde)*1000)+(cl.get(Calendar.SECOND)*1000)+Millisekunde;
    }else{
        Rückgabe= Stunde*3600000+Minute*60000+((60-Anfangszeitsekunde)*1000)+(cl.get(Calendar.SECOND)*1000)+Millisekunde;
    }
    }*/
    return Rückgabe;
    
}
 [..]
 
Zuletzt bearbeitet:
was gibt denn
Code:
getZeit()
zurück?
was sagt denn unser schönes logcat?
 
public long getZeit(){ long Rückgabe=System.currentTimeMillis()-Anfangszeit; return Rückgabe; }

Steht da doch ;)!

Im Logcat steht nichts von errorn... Ist ja kein direkter Fehler nur irgendwie ist in Anfangszeit nen falscher wert :/
 
Dann mach doch mal folgendes.
Dort wo du die Anfangszeit abfragst setzt du eine Log Ausgabe.
Code:
Anfangszeit = System.currentTimeMillis();
Log.d("Millisekunden abfrage", "Anfangsmillisekunden = " + Anfangszeit);
und dort wo du die Endzeit abfragst setzt du wieder eine

Code:
Endzeit = System.currentTimeMillis();
Log.d("Millisekunden abfrage", "Endmillisekunden = " + Endzeit);
und dort wo du die Differenz berechnest machst du noch einen Log

Code:
Dauer = Endzeit - Anfangszeit;
Log.d("Millisekunden abfrage", "Dauer in Millisekunden = " + Dauer);
und dann zeig mal was im logcat steht.
 
Anfangsmillisekunden = 1386531210383
Endmillisekunden = 1386531237213
Dauer in Millisekunden = 1386531237213

Das sind die Werte ....
Irgendwie zieht der nichts ab.... Komisch oder?
 
Würde mal sagen da hast du irgendwo was falsch gemacht.

Zeig mal den code.
 
Das, was dafür wichtig ist:
Code:
public class GameLayout extends Activity {
 
   long aktuelleZeit;
   long Endzeit=0;
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
         [..]
        Anfangszeit=System.currentTimeMillis();
        this.starteSpiel();
      
        
}
    public void starteSpiel(){
      [..]
        
        

public long getZeit(){
    long Rückgabe=System.currentTimeMillis()-Anfangszeit;
    
    /*Calendar cl = Calendar.getInstance();
    long Stunde=cl.get(Calendar.HOUR)-Anfangszeitstunde;
    long Minute=cl.get(Calendar.MINUTE)-Anfangszeitminute;
    long Sekunde=cl.get(Calendar.SECOND)-Anfangszeitsekunde;
    long Millisekunde=cl.get(Calendar.MILLISECOND)-Anfangszeitmillisekunde;
    if (Minute==0){
         Rückgabe=(Stunde*3600000)+(Minute*60000)+ (Sekunde*1000)+(Millisekunde);
    }else{
        if(Minute==1){
         Rückgabe= Stunde*3600000+(Minute-1)*60000+((60-Anfangszeitsekunde)*1000)+(cl.get(Calendar.SECOND)*1000)+Millisekunde;
    }else{
        Rückgabe= Stunde*3600000+Minute*60000+((60-Anfangszeitsekunde)*1000)+(cl.get(Calendar.SECOND)*1000)+Millisekunde;
    }
    }*/
    return Rückgabe;
    
}
 [..]
 
Wo deklarierst du denn Anfangszeit??
 
Auch da oben, aktuelle Zeit kansnt du mit Anfangszeit ersetzen ;)
long Anfangszeit=0;
long aktuelleZeit=System.currentTimeMillis();
long Endzeit=0;
 
Also ich würde mal behaupten das in getZeit() deine Anfangszeit 0 ist.
Wo rufst du denn getZeit() auf?
 
In einer anderen Klasse:
GameLayout Game = new GameLayout();
In einem Ausgabestring steht dann x+ Game.getZeit()+x

Ich vermute mal den fehler in der
GameLayout Game = new GameLayout();
Da ich da das wieder überschreibe, aber wie kann man das ganze vernüftig lösen? :O
 
Zuletzt bearbeitet:
Gerade nochmal getestet... tatsächlich ist anfangszeit immer beim berechnen = 0 -.-!

Kann mir jemand helfen?
Also folgendermaßen:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.gamelayout);
Anfangszeit=System.currentTimeMillis();

Irgendwann kommt es dann zu:
Endzeit=System.currentTimeMillis();

Dann:
in einer anderen Klasse:
Game.getZeit()


GetZeit:
Endzeit = System.currentTimeMillis();
Log.d("Millisekunden abfrage", "Endmillisekunden = " + Endzeit);
long Rückgabe=System.currentTimeMillis()-Anfangszeit;
long Dauer = Endzeit - Anfangszeit;
Log.d("test", "Anfangszeit2 ="+Anfangszeit);
Log.d("Millisekunden abfrage", "Dauer in Millisekunden = " + Dauer);
return Rückgabe;
 
Zurück
Oben Unten