Zeitspanne in Jahren als Kommazahl abrufen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Zeitspanne in Jahren als Kommazahl abrufen

    Hallo,

    ich habe das Problem, dass ich aus 2 Datumsangeben die TimeSpan berechnen möchte und diese in Jahren brauche. Ich will nicht einfach durch 365 (oder 365,25) dividieren. Ich habe mir eine Methode geschrieben, die die Anzahl der Schaltjahre zwischen Datum 1 und Datum 2 aufsummiert, und die Anzahl der Nicht-Schaltjahre aufsummiert, und deren Summe dann durch die Gesamtzahl der Jahre teilt. Das gibt mir 365,23. Etwas besser. Geht es noch besser? Es muss eine Kommazahl sein.

    Viele Grüße
    Bartosz
    Wie wäre es mit TotalDays?

    C#-Quellcode

    1. DateTime start = new DateTime(2020, 11, 1);
    2. DateTime end = DateTime.Now;
    3. TimeSpan diff = end - start;
    4. Console.WriteLine($"Total: {diff.TotalDays:n2}");
    5. # Output:
    6. # Total: 760.60
    2020 war ein Schaltjahr. Was soll rauskommen, wenn Du vom 28.02.2020 bis 27.02.2021 rechnest, und was, wenn von 28.02.2021 bis 27.02.2022. Je 1,00, obwohl es unterschiedlich viele Tage sind?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Aber wieviele Jahre jeweils?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ok, Du willst ein Ergebnis in Jahren. Warum ergibt das eine ein Jahr und das andere 0,99? Es ist beides vom 28.02. von Jahr x zum 27.02 des Jahres x+1. Solange nicht klar ist, wie Du ein Jahr definierst, kann man nicht ermitteln, was das richtige Ergebnis ist.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ich mache das für die Arbeit und es geht um Verträge. Der Zeitraum zwischen Geburtsdatum und Vertragsbeginn muss korrekt sein, weil ich damit das Ablaufdatum bestimmen muss. Ich kann zwar mit Date.AddYears(LaufzeitInJahren) arbeiten, aber die Person ist in den meisten Fällen gerade so nicht ganze x Jahre alt (sondern als Beispiel x,79). Das heißt, ich muss mit ner While-Schleife ein paar Tage draufaddieren und ständig neu evaluieren, ob sie x Jahre alt ist. Diese Rechnung muss stimmen.
    Naja, was ist das Date bei Date.AddYears(LaufzeitInJahren)?
    Und was konkret heißt

    Bartosz schrieb:

    Der Zeitraum zwischen Geburtsdatum und Vertragsbeginn muss korrekt sein
    Wann ist das korrekt? Wie definiert sich das?

    VB.NET-Quellcode

    1. If Geburtstag.AddYears(18) > Date.Today Then MessageBox.Show("Person ist heute noch nicht volljährig.").
    2. If Geburtstag.AddYears(18) > Vertragsbeginn Then MessageBox.Show("Person darf erst mit 18 den Vertrag beginnen.").

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Das sehe ich auch so.
    @Bartosz Glaubst Du, dass Du so was wie Versicherungs-Mathematik neu programmieren musst?
    Das Denken in nicht-ganzzahligen Jahren ist ein absolutes NoGo.
    Schreib einfgach mal eine vernünftige Aufgabenstellung / Problembeschreibung, in der kein Wort über Programmierung und Code vorkommt.
    Dann sehen wir weiter.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Bartosz schrieb:

    Der Zeitraum zwischen Geburtsdatum und Vertragsbeginn muss korrekt sein, weil ich damit das Ablaufdatum bestimmen muss. Ich kann zwar mit Date.AddYears(LaufzeitInJahren) arbeiten, aber die Person ist in den meisten Fällen gerade so nicht ganze x Jahre alt
    vielleicht hilft die Formuliereung des Gesetzgebers ein bischen: Da ist immer von "vor/nach Vollendung des soundsovielten Lebensjahres" die Rede.
    Also auch der Gesetzgeber fasst was wir gemeinhin als Altersangabe kennen als etwas ganz-zahliges auf.
    Mit Jahres-Anteilen kann man (ebenso wie mit Monats-Anteilen) nicht exakt exakt rechnen, weil sind verschieden lang.
    Etwas anneres ists mit Tagen, Stunden, Wochen, Minuten: Diese Dinge sind immer gleichlang, und kann man ineinander umrechnen, und Anteile bilden und wasweissich.

    Bartosz schrieb:

    Der Zeitraum zwischen Geburtsdatum und Vertragsbeginn muss korrekt sein, weil ich damit das Ablaufdatum bestimmen muss
    Jo, das ist wohl der Punkt - wonach RFG auch fragt: Wieso muss dieser Zeitraum korrekt sein, um ein Ablaufdatum zu bestimmen?
    Also entweder du fasst diesen Zeitraum exakt auf, dann aber nicht in Jahren (sondern in Tagen oderso).
    Oder halt in Jahren - dann aber ganzzahlig, und eine exakte Zeitspanne ist das nicht.
    Da ist immer von "vor/nach Vollendung des soundsovielten Lebensjahres" die Rede.
    Ja, es gibt bestimmte Methoden; zum Beispiel Ein halbes Jahr vor oder nach seinem Geburtsdatum ist man so alt wie am Geburtsdatum“; damit man ja nicht mit Kommazahlen arbeitet. Ihr habt mich überzeugt. Ich muss da nochmal nachfragen. Ich dachte auch, ich kann ja mal selbst neu schreiben. Ok, so wird das nichts.
    Ich kenne auch die Gesetze nicht gut genug, muss ich zugeben. Vaporizeds Beispiel
    – beide Fälle sind laut ihm 1 Jahr, obwohl der eine Fall einen Schalttag beinhaltet hat mich verunsichert xD. Was ist deine Meinung?