Gregorian Calender Datum Differenz Ausgabe

  • Hallo Leute,


    ich bin neu hier und habe leider eine für euch wahrscheinlich sehr einfache Anfängerfrage.
    Zum Thema Java und Android Entwicklung habe ich schon einiges gelesen. Unter anderem mehrere Bücher. Aber so richtig klick hat es noch nicht gemacht. Leider.
    Meine erste App, die ich (wahrscheinlich erstmal nur für mich selber) gerade versuche zu erstellen beschäftigt sich mit dem Thema Uhrzeiten und Schulden :)
    Die Idee: Man soll in der App sehen können, dass etwas passiert, wenn man einen Kredit abzahlt. Dafür habe ich erstmal versucht mit der Zeit zu arbeiten


    Ich hoffe ihr verzeiht mir, wenn ich irgend was falsch gemacht habe.....


    Das eigentliche Ziel und damit meine Frage lautet folgende: Wie schaffe ich es, dass das Ergebnis nicht wie unten gezeigt aussieht, sondern das Ergebnis so angezeigt wird(Beispiel) : 8 Jahre, 7 Monate, 10 Tage, 20 Stunden, 5 Minuten, 3 Sekunden.
    Beim ausführen des Codes passiert folgendes:



    Anbei noch der Code:


  • Speziell für Deine Frage bzw. Deinem Denkfehler:


    Du musst natürlich die jeweils berechneten Wert (auf Ganzzahl gerundet) von Deinem Differenzwert abziehen.


    Wenn das 6 Jahre und 48 Wochen dauert, Du die 6 Jahre aber nicht vom Differenzwert abziehst, dann sind es halt immer noch 360 Wochen statt 48 Wochen.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • huhu,


    vielen Dank erstmal für die tollen Antworten und danke fürs Willkommen :)


    Für mich ist das alles noch nicht so durchsichtig wie für euch vielleicht .-)


    Mit SimpleDateFormat habe ich es sehr lange versucht, aber so richtig zurecht gekommen bin ich damit nicht, sobald ich damit rechnen wollte. Außerdem erhoffe ich mir durch den Gregorian Calender das Schaltjahr auszuhebeln.


    Wenn ich jetzt die Werte abziehe voneinander, dann wird das aber ganze aber sehr rechenintensiv in dieser einen Sekunde...


    Kann mir jemand ein Beispiel geben, wie ich das anstelle? Also mir würde eventuell schon reichen, wenn mir jemand den Code dafür mal zeigen kann, wie ich die Sekunden oder die Tage ausgebe. Den Rest denke ich bekomme ich selber zusammen.

  • Ich musste ein bisschen suchen und habe es nicht weiter getestet, aber das sieht ganz gut aus:
    https://developer.android.com/…/concurrent/TimeUnit.html


    Also quasi

    Java
    long days = TimeUnit.convert(time, TimeUnit.DAYS);
    long hours = TimeUnit.convert(time, TimeUnit.HOURS);
    long minutes = TimeUnit.convert(time, TimeUnit.MINUTES);
    long seconds = TimeUnit.convert(time, TimeUnit.SECONDS);


    Die Wochen/Jahre müsstest Du allerdings immer noch selbst aus den Tagen berechnen.
    Mit den definierten Gesetzen zur Berechnung der Schaltjahre dürfte das nicht so schwer werden.
    (%4 = Schaltjahr, %100 kein Schaltjahr, %400 Schaltjahr…)


    Im Übrigen solltest Du diese Berechnung keinesfalls jede Sekunde durchführen!


    Ich würde diese Berechnung einmal beim onResume() machen und dann die Sekundenwerte über einen Timer runterzählen.
    Wenn die Sekunden <0 würden auf 59 setzen und eine Minute abziehen und das Ganze vielleicht bis auf die Stunden hoch durchiterieren.
    Ich bezweifle, dass sich jemand ein Tablet kauft und es 7 Jahre lang gut sichtbar am Strom nur mit der App laufen lässt um zu sehen, wann sein Kredit endlich abbezahlt ist. ;)

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Hey Marco,


    danke ich bin so ein dussel. Ich vermute, dass ich einfach noch nicht so weit bin :(


    Wo füge ich das den ein?


    Java
    long days = TimeUnit.convert(time, TimeUnit.DAYS);

    Non-static methode 'convert' bekomme ich da bei mir ....


    Das ich die Berechnung jede Sekunde durchführe war ursprünglich gar nicht so geplant :) Ich hatte das so aufgebaut, dass ich erstmal nur die Uhrzeit anzeigen lasse. Und dann viel mir ein, ach das könnte man ja mal so rein schreiben. Werde das noch auslagern oder die Zeit zumindest reduzieren.

  • Huch, stimmt, ist ja gar nicht static.


    Java
    long days = TimeUnit.DAYS.convert(time, TimeUnit.MILLISECONDS);

    Ein bisschen schwierig zu lesen.


    Du bist also als TimeUnit das Format an, in das Du formatieren möchtest, als ersten Parameter den Wert und als zweiten Parameter das Format des Wertes.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Hallo Marco,


    an dieser Stelle möchte ich mich mal herzlich bedanken für Deine nette Arbeit und Hilfe! Ich denke, dass ich den Code nun zusammen bekomme....
    Korrigiere mich bitte, wenn ich falsch liege:
    Ich berechne erst mit

    Java
    long years = TimeUnit.YEARS.convert(time, TimeUnit.MILLISECONDS);

    Die Jahre und dann ziehe ich dann nach dem berechnen der Tage die Jahre ab? Jetzt fehlt mir nur noch die Möglichkeit, das ganze irgendwie zu runden? Kann ich da Math.Round mit einbauen?


    Liebe Grüße

  • Ich hab es jetzt folgender Maßen gelöst:


    Die Ausgabe hierfür sieht damit so aus, die Jahre werd ich noch dazu machen :



    Als nächstes werde ich mich im den Eurobetrag kümmern der auch irgendwie runter zählen soll und später werde ich mich mal dran setzten und versuchen Benutzereingaben zuzulassen. Also nicht HardCoded.
    Damit man nicht immer compilieren muss, um das Datum zu ändern oder den Betrag oder was auch immer....


    An dieser Stelle bedanke ich mich noch einmal recht herzlich bei allen :)

  • Aber offenbar scheint es nur Tage, Stunden, Minuten etc.. zu geben. YEARS macht er nicht.... Ne Idee?

    Nuja… Also… Ähm…


    Die Wochen/Jahre müsstest Du allerdings immer noch selbst aus den Tagen berechnen.
    Mit den definierten Gesetzen zur Berechnung der Schaltjahre dürfte das nicht so schwer werden.
    (%4 = Schaltjahr, %100 kein Schaltjahr, %400 Schaltjahr…)

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!