Ein int nach Jahre, Tage, Stunden



  • tach

    wie kriegt man von einem int die jahre, stunden und minuten heraus? zwar wüsste ich wie ich nur an die jahre komme, oder nur an die tage oder nur an die stunden, aber alle drei zusammen nicht ganz.

    z.b. ist in minuten der wert 12117565 gegeben. einfach gerechnet wären das 23 jahre. 12117565 / 60 / 24 / 365....
    jedoch muss da ja noch ein rest wert von tagen und minuten sein. wie rechnet man sowas genau aus? natürlich müsste man auch beachten ob der int gross genug ist, das es mindestens ein jahr, mindestens einen tag und mindestens eine minute ergibt.



  • du rechnest einfach nochmal rückwärts. also folgendermassen:
    Und vielleicht solltest du noch den genauen wert für Jahre nehmen, also irgend ein Kommawert zwischen 365 und 366. Dürfte etwa bei 365.2 liegen.

    Ah hier:
    Unter astronomische Definitionen

    int jahre = minuten / 60 / 24 / 365;
    int restMinuten = minuten - (jahre * 60 * 24 * 365);
    


  • ehm, rechnest du in der zweiten zeile nicht minuten minus minuten? würde ja null geben. 😕



  • nein, da der compiler bei jeder division abrundet, bleiben in minuten noch ein paar restminuten übrig, wenn man wieder von den jahren zurück auf die minuten rechnet.

    das ist in etwa das selbe verfahren, wie wenn man die nachkommastellen einer Fließkommazahl erfahren will:

    float blub = 1.02f;
    int abgerundeteZahl = (int)blub;
    float nachkommastellen = blub - abgerundeteZahl;
    

    Zugegeben die Rechnung wird wohl etwas ungenau. Besser wäre es, wenn du Jahre als Fließkommazahl speicherst und die Rechnung auch mit Fließkommazahlen ausführst. Im nachhinein kannst du dann immer noch die Nachkommastellen rausfiltern und an Hand dieser dann auf die Restminuten schließen.


Anmelden zum Antworten