Android Aktuelle Systemzeit als Variable einlesen

B

Beni

Neues Mitglied
0
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
 
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.
 
Hallo funcoder

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

Dankeschön.

Gruss Beni
 
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
 
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!
 
Vielen Dank funcoder :)

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

Gruss Beni
 
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
 
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
 
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
 
Sorry, ich bin erst über jetzt Thread gestolpert.

funcoder schrieb:
Code:
do{

 try {
  Thread.sleep(2000); // 2 Sekunden pausieren
 } catch (InterruptedException e) {

 }

System.out.println("Test"); // Wird alle 2 Sekunden ausgeführt

}while(!exitLoop);

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:
Zu Ende lesen hätte geholfen^^
 
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 ;)
 

Ähnliche Themen

S
Antworten
4
Aufrufe
956
Sempervivum
S
A
Antworten
10
Aufrufe
1.868
swa00
swa00
R
  • raller
Antworten
15
Aufrufe
505
DOT2010
DOT2010
Zurück
Oben Unten