1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Android Aktuelle Systemzeit als Variable einlesen

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Beni, 08.11.2010.

  1. Beni, 08.11.2010 #1
    Beni

    Beni Threadstarter Neuer Benutzer

    Beiträge:
    15
    Erhaltene Danke:
    0
    Registriert seit:
    13.09.2010
    Hallo zusammen

    So, habe mal wieder ein Problem ;) Ich suche Krampfhaft im Google nach einer Lösung, bzw. einem Beispielcode. Aber irgendwie habe ich noch nichts schlaues gefunden. Auch im Forum habe ich nichts gefunden, oder ich bin unfähig zu suchen :D

    Ich programmiere gerade an meiner Android App weiter und bräuchte die SystemZeit als Variable, damit ich mit Ihr weiter arbeiten kann.

    Kann mir jemand sagen oder helfen, wie ich die aktuelle Systemzeit auslesen und in einer Variablen speichern kann? Und ist es dann auch möglich die alte Zeit der neuen abzuziehen, also die Differenz zu errechnen?

    Also so:

    Ich drücke Button1 um 12:05
    Ich drücke Button1 um 12.10

    Differenz = 5 Min.

    Wäre froh für jede Hilfe und danke schonmal im vorraus :)

    Gruss Beni
     
  2. funcoder, 08.11.2010 #2
    funcoder

    funcoder Erfahrener Benutzer

    Beiträge:
    218
    Erhaltene Danke:
    38
    Registriert seit:
    15.08.2009
    Mit folgender Codezeile bekommst du die aktuelle Uhrzeit in Millisekunden
    Genaueres findest du genau HIER

    long aktuelleZeit = System.currentTimeMillis();

    Du bekommst letzendlich einen long der in Millisekunden die verstrichene Zeit seit dem 1. Jan 1970 angibt.
    Rechnen kannst du ganz einfach in dem du die höhere Zahl von der kleineren abziehst und die millisekunden anschließend umrechnest in Stunden/Minuten/Sekunden.
     
  3. Beni, 08.11.2010 #3
    Beni

    Beni Threadstarter Neuer Benutzer

    Beiträge:
    15
    Erhaltene Danke:
    0
    Registriert seit:
    13.09.2010
    Hallo funcoder

    Vielen Dank :) Das werde ich dann ausprobieren, sobald ich wieder zu Hause bin.

    Dankeschön.

    Gruss Beni
     
  4. Beni, 10.11.2010 #4
    Beni

    Beni Threadstarter Neuer Benutzer

    Beiträge:
    15
    Erhaltene Danke:
    0
    Registriert seit:
    13.09.2010
    So, ich bins wieder ;)

    Hat super geklappt mit der Zeit. Konnte auch die Differenz ausgeben. (erstmals in Sekunden) wie ich das umrechne muss ich noch schauen, dürfte aber nicht so das Problem sein ;) Vielen Dank nochmals für den Tipp.

    Nun habe ich aber noch ein Problem. Wie kann ich eine Funktion jede Sekunde abrufen?

    Ich habe zur Zeit im Public Void irgendwas() meine 4 Buttons definiert und je nach dem was ich drücke, gebe ich da was aus (und eben auch die Zeit, wie lange ich zwischen zwei Buttons gewartet habe mit drücken, also das delay)

    Nun würde ich aber gerne nicht nur das delay ausgeben, sondern immer die aktuelle Uhrzeit dazu und sagen wir mal alle Minute dann eine zwischensumme ausgeben.

    Als Beispiel: Ich drücke um 17:00 das erste mal auf Button 1 und gebe also 17:00 aus und eine Zahl1. Nach 5 Minuten drücke ich Button 2 und gebe dann die differenz, also 5 Minuten und eine andere Zahl2 aus, die ich dann mit Zahl1 addiere( Totalzahl = Zahl1+Zahl2). Ich will aber jede Minute die verstreicht, die Totalzahl um sagen wir mal 0.5 verkleinern.

    Dazu müsste ich doch die Zeit alle Minute aktualisieren, oder? Aber wie mache ich das genau? Ich habe was über Handler gelesen, der sowas machen kann...aber leider kein Beispiel gefunden, das mir verständlich war ;)

    Kann mir da nochmals jemanden einen Tipp geben? Vielen Dank schonmal :)

    Gruss Beni
     
  5. funcoder, 10.11.2010 #5
    funcoder

    funcoder Erfahrener Benutzer

    Beiträge:
    218
    Erhaltene Danke:
    38
    Registriert seit:
    15.08.2009
    Wenn ich dich richtig verstehe, möchtest du dass alle X Sekunden ein Programmcode ausgeführt wird, der dann was auch immer macht.

    Code:
    
    do{
    
     try {
      Thread.sleep(2000); // 2 Sekunden pausieren
     } catch (InterruptedException e) {
    
     }
    
    System.out.println("Test"); // Wird alle 2 Sekunden ausgeführt
    
    }while(!exitLoop);
    
    
    OK, am besten du packst den obigen Code in eine eigene Methode die einmal aufgerufen wird.
    Der obige Code macht eigentlich nur eine Endlosschleife die bei Bedarf auch verlassen werden kann, indem der Boolean exitLoop auf true gesetzt wird.
    Mit Thread.sleep wird die Programmausführung an dieser Stelle für 2 Sekunden unterbrochen. Weshalb du diesen Code auch in einen eigenen Thread auslagern musst. Klick - HowTo Thread


    Alternativ machst du eine Endlosschleife, die immer wieder die aktuelle Zeit ausließt und überprüft ob zur vorherigen Ausführung X Sekunden vergangen sind.

    if(aktuelleZeit - alteZeit > 5000){
    // Mach was
    alteZeit = aktuelleZeit;
    }

    Das dann noch in eine Endlosschleife, fertig!
     
  6. Beni, 10.11.2010 #6
    Beni

    Beni Threadstarter Neuer Benutzer

    Beiträge:
    15
    Erhaltene Danke:
    0
    Registriert seit:
    13.09.2010
    Vielen Dank funcoder :)

    Probier ich dann aus, sobald ich heute Abend oder spätestens Morgen dazu komme :)

    Gruss Beni
     
  7. Beni, 15.11.2010 #7
    Beni

    Beni Threadstarter Neuer Benutzer

    Beiträge:
    15
    Erhaltene Danke:
    0
    Registriert seit:
    13.09.2010
    Hallo funcoder

    Ich bin glaub zu dumm um das einzubauen ;) Aber ich kann wenigstens nun die Zeit einlesen und auch das dem entsprechende Format.

    Nun habe ich nur noch ein Problem...wenn ich If Schlaufen habe und darin die Zeit auslese, also so:

    If test1 == 1
    {
    long aktuelleZeit = System.currentTimeMillis();
    }

    If test1 == 0
    {
    long alteZeit = System.currentTimeMillis();
    }

    und danach die Zeiten voneinander abziehen will (ausserhalb der If-Schlaufen), kennt er diese Variablen nicht mehr, oder kann sie nicht zuweisen. Muss ich das irgendwie mit Globalen Variablen lösen, dann würde ich aber nicht mehr die aktuelle Zeit rauslesen nehm ich mal an. Oder mache ich einen Überlegungsfehler?

    Wäre dankbar, wenn ich da nochmals einen Input bekomme :)

    Gruss Beni
     
  8. funcoder, 15.11.2010 #8
    funcoder

    funcoder Erfahrener Benutzer

    Beiträge:
    218
    Erhaltene Danke:
    38
    Registriert seit:
    15.08.2009
  9. Beni, 15.11.2010 #9
    Beni

    Beni Threadstarter Neuer Benutzer

    Beiträge:
    15
    Erhaltene Danke:
    0
    Registriert seit:
    13.09.2010
    Ich entschuldige mich in aller Form...das hätte ich wohl wirklich noch selbst suchen können!

    Danke für den Link, ist gleich mal gespeichert :) Dann muss ich wohl an meiner Struktur noch ein wenig rumbasteln ;)

    Danke Dir.

    Gruss Beni
     
  10. Beni, 23.11.2010 #10
    Beni

    Beni Threadstarter Neuer Benutzer

    Beiträge:
    15
    Erhaltene Danke:
    0
    Registriert seit:
    13.09.2010
    So, ich kam endlich mal wieder dazu :) Nun hat es geklappt :) Ich depp habe vergessen, die Variable oben zu definieren.

    Jetzt muss ich mal noch danach suchen, wie ich gif's noch integrieren kann. Hab mal was von Animeted gelesen. Also wenn da noch wer nen brauchbaren Link hat zu einem Tutorial, wäre ich auch Dankbar :)

    Gruss Beni
     
  11. Scavanger, 23.11.2010 #11
    Scavanger

    Scavanger Junior Mitglied

    Beiträge:
    28
    Erhaltene Danke:
    8
    Registriert seit:
    26.06.2010
    Phone:
    Samsung Galaxy Note 4
    Sorry, ich bin erst über jetzt Thread gestolpert.

    Ist keine gute Idee, bis ganz schlecht. Damit wird der ganze (UI) Thread angehalten, damit kann nicht mehr auf on...() (Pause, Resume, usw.) reagiert werden im schlimmsten Fall wird dann die App vom BS einfach "abgeschossen". Außerdem kann die Activity keine andern Aufgaben mehr erledigen. Das würde ich fast als "worst practice" bezeichnen.

    Beni hate mit den Handlern schon recht, damit kann man das Verhalten eines Timers nachbauen, auch deren Verwendung unter Android nicht empfohlen wird.

    Was Beni sucht ist wunderbar hier erklärt:
    Updating the UI from a Timer | Android Developers
     
    Zuletzt bearbeitet: 23.11.2010
  12. Fr4gg0r, 23.11.2010 #12
    Fr4gg0r

    Fr4gg0r App-Anbieter (Werbung)

    Beiträge:
    2,506
    Erhaltene Danke:
    447
    Registriert seit:
    21.12.2009
    Zu Ende lesen hätte geholfen^^
     
  13. Beni, 24.11.2010 #13
    Beni

    Beni Threadstarter Neuer Benutzer

    Beiträge:
    15
    Erhaltene Danke:
    0
    Registriert seit:
    13.09.2010
    Danke Scavanger für Deine Antwor :) Aber eben, ich habe es nun schon anders lösen können. Auf nen Handler kann ich atm. verzichten, aber Danke für den Link. Brauch ich sicher mal noch.

    Ich habe dafür noch ein anderes Problem Zeiteinlesen betrifft. Ich konnte die Aktuelle Zeit auslesen und in einem Anständigem Format rausgeben als String. Aber irgendwie kann ich nun die Differenz nicht ausgeben.

    Dachte, ich kann das so machen.

    Long Zeit1 = Zeit in Millisekunden auslesen
    Pause (script was auch immer)
    Long Zeit2 = Zeit in Millisekunden auslesen

    Long diff = Zeit2 - Zeit1

    und daraus dann ein datumformat machen und ausgeben.

    12:00
    Pause
    12:03

    diff = 00:03

    Aber das funzt noch nicht...er gibt mir da dann Zeit2 raus. Evtl liegt es noch daran, dass ich die zwei Zeiten aus je zwei IF-Schlaufen lese. Aber Zeit1 und Zeit2 bringt er mir korrekt. Darum bin ich ein wenig verwundert ;)

    Aber ich versuch mal die beiden Zeiten in eine Schlaufe zu packen um zu sehen, ob es mir dann korrekt angezeigt wird.

    Ist ja bald wieder Wochenende^^ Dann kann ich nochmals dran rumbasteln ;)
     

Diese Seite empfehlen

Besucher kamen mit folgenden Begriffen auf unsere Seite:

  1. android studio uhrzeit ausgeben