Relativen Anteil von zwei Datümer auf Monatsebene umrechnen

beta20

Top Contributor
Hallo zusammen,

ich habe das nun mal programmiertechnisch umgesetzt, benötige aber nochmal etwas Hilfe.

Ich vergleiche meine Berechnung mit der Berechnung einer am Markt vorhanden Software. Mein Ergebnis ist relativ nah, aber nicht 100%. Hat hier jemand eine Idee und kann mir sagen, was an meiner Berechnung ggf. falsch ist? Wie die Formel in der Referenzsoftware ist, kann ich nicht sagen. Einer Aussage zu folge "sekundengenau". Ich gehe jetzt einfach mal davon aus, dass deren Berechnung stimmt.

Ich möchte hier einen Vertrag beenden (kündigen). Als Endedatum verwende ich in den folgenden 2 Beispiele das heutige Datum. Kündigungsfristen lasse ich bewusst nun hier außen vor. Die Kündigung soll sofort wirksam sein.

Beispiel:
Vertragsbeginn: 15.06.20 00:00
Gebührenintervall: jährlich
Gebühr: 275 Euro
Setup Gebühr: 50 Euro

Kündigungsdatum: 01.11.2020 um 18:15 Uhr
Abgerechnet bis: 15.06.21 00:00

-> Der Kunde bekommt nun eine Gutschrift für den nicht genutzten Teil
Meine Berechnung: 201,94 EUR
Andere Software : 202,54 EUR

"nicht genutzter Anteil"
Meine Berechnung: 0.6170717319571284
Andere Software: 0,618904

Hier mein Code für die Berechnung
Java:
public ContractEndHelper calculateForCancelContractImmediately(Contract contract,
            ContractEndHelper contractEndHelper) {

        // Datum berechnen, bis der Vertrag läuft
        LocalDateTime   endDateContract = LocalDateTime.now();

        // Bis wann wurde gezahlt (abgerechnet bis)
        LocalDateTime billedUntil = contract.getBilledUntil();

        // Zeit der bisherigen Nutzung
        Duration duration = Duration.between(contract.getCurrentContractPhase().getStartDate(), endDateContract);
        double diffInMillies = duration.toMillis();

        // Gesamtzeit
        Duration dur = Duration.between(contract.getCurrentContractPhase().getStartDate(), billedUntil);
        double diffTotalUsageInMillies = dur.toMillis();

        // Nutzung
        double usage = diffInMillies / diffTotalUsageInMillies;
        double restUsage = 1 - usage;
       
        double recurringFee = 25; // Gebühr
        double creditNoteValue = recurringFee * restUsage;

        ////////////////////////
        // Bruttosumme berechnen (19 %)
        ////////////////////////

        // Gebühr berechnen
        creditNoteValue = creditNoteValue * (1 + 19 / 100);
        contractEndHelper.setCreditNoteValue(creditNoteValue);
       
        contractEndHelper.setExecutionDate(endDateContract);

        return contractEndHelper;
    }

Kann mir jemand erklären, warum ich eine Differenz von 0.60 EUR habe?
Klar könnte man nun sagen, sind ja nur 60 Cent, aber bei einigen Veträgen kommt da eine Summe zusammen.

BTW:
Da die Bestellung am 15.06.2020 getätigt wurde, sollte auch die geänderte MwSt auf 16% keine Rolle spielen. In der erstellten Gutschrift sehe ich ebenfalls MwSt = 19%
 
K

kneitzel

Gast
Da wird wohl eher der Zeitpunkt der Leistungserbringung maßgeblich sein.
Das spielt bei der eigentlichen Problematik zwar keine Rolle, aber da dies ggf. für den einen oder anderen wichtig sein könnte, will ich das noch weiter konkretisieren:
Der Zeitpunkt, wann etwas geliefert bzw. die Leistung vollständig erbracht worden ist, ist entscheidend für die Umsatzsteuer. Also der Zeitpunkt der Beendigung der Leistung ist wichtig.

Siehe dazu z.B. die FAQ beim Bundesfinanzministerium:

"Welcher Stichtag gilt für die Berechnung der Umsatzsteuer?"
"Entscheidend ist in der Regel, wann eine Ware geliefert oder eine Dienstleistung vollständig erbracht ist. Der Umsatzsteuersatz, der zu diesem Zeitpunkt gilt, ist anzuwenden. Das gilt auch, wenn die Ware oder Dienstleistung schon vorher ganz oder teilweise bezahlt worden ist."

"Was ist mit Handwerkerleistungen, die über einen längeren Zeitraum anfallen?"
"Auf Handwerkerleistungen, die in der Zeit vom 1. Juli 2020 bis zum 31. Dezember 2020 beendet werden, sind grundsätzlich die neuen Umsatzsteuersätze anzuwenden. Diese Regelung gilt auch beim Hausbau."
 

LimDul

Top Contributor
Aus dem Bauch heraus ist die ganze Rechnung fiskalisch falsch. Duration (und erst Recht nicht die in Millisekunden - da wird es bei Sommer/Winterzeit Wechsel noch mehr falsch) hilft nicht.

Du musst auf Monate und Tage runterbrechen. Ein Monat = 1/12 des Jahresbeitrages, 1 Tag = 1/30 des Monatsbeitrag (oder 1/360 des Jahresbeitrages). Ob der Monat 28, 29, 30 oder 31 Tage ist in der Regel egal.

Das ist die sogenannte pro Rata Berechnung. Und die ist nicht ganz trivial.
 

LimDul

Top Contributor
Beispiel:
Vertragsbeginn: 15.06.20 00:00
Gebührenintervall: jährlich
Gebühr: 275 Euro
Setup Gebühr: 50 Euro

Kündigungsdatum: 01.11.2020 um 18:15 Uhr
Abgerechnet bis: 15.06.21 00:00
Ich versuch es mal nachzurechnen.
Kündigung am 1.11. 2020 (Uhrzeit ist ja komplett egal)
Vom 15.11.20 bis 15.6.20 sind 7 Monate.
1.11 bis 14.11 sind 14 Tage

Ergäbe als Anteil (7*30+14) /360 = 62,2222%
Würde die Kündigung erst am 2.11 wirksam werden, wären (7*30+13) /360 = 0,61944%

Entspricht keinem deiner beiden Werte :) Aber ich bin auch nicht firm darin, wir haben ein Stück Software die das korrekt macht :D
 
B

BestGoalkeeper

Gast
Hm komme da auf einen Wert in der Mitte: 202.12:
Java:
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class Jahr {
    public static int daysBetweenDates(int d1, int m1, int y1, int d2, int m2, int y2) {
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd MM yyyy");
        LocalDateTime l1 = LocalDateTime.of(y1, m1, d1, 0, 0);
        LocalDateTime l2 = LocalDateTime.of(y2, m2, d2, 0, 0);
        return (int) Duration.between(l1, l2).toDays();
    }

    public static void main(String[] args) {
        int days0 = daysBetweenDates(15, 6, 2020, 15, 6, 2021);
        System.out.println(days0);
        int days1 = daysBetweenDates(1, 11, 2020, 15, 6, 2021) + 1;
        System.out.println(days1);
        float gutschrift = (float) (325.0 / days0 * days1);
        System.out.println(gutschrift);
    }
}

Mit der MwSt ist das nicht so ganz einfach, es wurde für ein Jahr im Voraus bezahlt, theoretisch hätte ja die Senkung um 3 Prozentpunkte eh gutgeschrieben werden müssen.
 
B

BestGoalkeeper

Gast
Ich denke ich bin der Sache auf die Schliche gekommen:
Java:
        for (int i = 0; i < 60; i++) {
            int m0 = (int) Duration.between(LocalDateTime.of(2020, 6, 16, 23, i), LocalDateTime.of(2021, 6, 15, 0, 0)).toMinutes();
            int m1 = (int) Duration.between(LocalDateTime.of(2020, 11, 1, 18, 15), LocalDateTime.of(2021, 6, 15, 23, 59)).toMinutes();
            float g2 = (float) (325.0 / m0 * m1);
            System.out.println(g2 + " " + i);
            if (g2 >= 202.54) {
                break;
            }
        }

Der effektive Vertragsbeginn muss irgendwann zwischen 16.6.20 23:00 Uhr und 16.6.20 23:30 Uhr gewesen sein...
 

mihe7

Top Contributor
-> Der Kunde bekommt nun eine Gutschrift für den nicht genutzten Teil
Nein. Tu Dir einen Gefallen und hör damit auf, mit irgendwelchen Anteilen nicht genutzter Leistungen rumzuhantieren. Die Frage ist nicht, wie viel Geld Du für nicht erbrachte Leistungen nicht bekommst, sondern einfach wie viel Geld Du für erbrachte Leistungen erhalten musst. Die Gutschrift ist einfach eine Differenz bezogen auf Geldbeträge.
 

mihe7

Top Contributor
@mihe7 Was wäre denn nun der absolut richtig Betrag? ;)
Das hängt von seinem Tarif ab :)

Der Punkt ist, dass man erbrachte Leistungen berechnet und der Anteil nicht-erbrachter Leistungen völlig uninteressant ist.

Wenn ich 275 € bezahlt habe, für den durch Kündigung verkürzten Zeitraum aber nur 250 € berechnet werden, dann bekomme ich halt 25 € zurück.

Sprich: ich brauche nur eine Funktion, die mir für einen beliebigen Zeitraum in einem Tarif den fälligen Betrag ausrechnet.
 
B

BestGoalkeeper

Gast
richtigE, meine ich natürlich... Ich denke, ich hab's verstanden, aber mein Gehirn schaltet gerade auf Sparflamme. Gut's Nächtle!
 
B

BestGoalkeeper

Gast
Aber wieso wird auch die Setup Gebühr in die Berechnung miteinbezogen? Das erschließt sich mir nicht ganz... Dir?
 

beta20

Top Contributor
Vielen Dank schon Mal für die vielen Antworten.
Ich habe hier nun nochmal ein paar Referenzwerte:
Meiner Meinung werden hier nicht nur Tage betrachtet, sondern auch Stunden / Minuten bzw. vermutlich Sekunden.
Siehe Vergleich 1) und 2)

Jährlich:
Vertragsbeginn: 15.06.20 00:00
Gebührenintervall: jährlich
Gebühr: 275 Euro
Setup Gebühr: 50 Euro

1)
Endet am: 02.11.2020 um 07:10
Abgerechnet bis 15.06.21 00:00
Gutschrift: 202,07 EUR

2)
Endet am: 02.11.2020 um 00:00
Abgerechnet bis: 15.06.21 00:00
Gutschrift: 202,34 EUR
-> Gutschrift wurde mit Faktor 0,61828 berechnet

3)
Vertragsstart:
Endet am: 15.06.2020 um 00:00
Abgerechnet bis: 15.06.21 00:00
Gutschrift: 386,75 EUR

4)
Endet am: 16.06.2020
Abgerechnet bis: 15.06.21 00:00
Gutschrift: 326,35 EUR
-> Gutschrift wurde mit Faktor 0,997222 berechnet

--------
Monatliches Beispiel:
Vertragsbeginn: 15.06.20 00:00
Gebühr: 25 EUR
Setup: 50 EUR
Gebührenintervall: monatlich

Endet am: 02.11.2020 um 07:14
Abgerechnet bis: 15.07.20 00:00
Gutschrift: -104,12 EUR

Endet am: 15.06.2020 um 00:00
Abgerechnet bis: 15.07.20 00:00
Gutschrift: 88,50 EUR


Ich komme leider immer noch nicht ganz auf den Wert. Es scheint, dass noch etwas nicht an der Berechnung stimmt.
 
Zuletzt bearbeitet:

beta20

Top Contributor
Ich denke ich bin der Sache auf die Schliche gekommen:
Java:
        for (int i = 0; i < 60; i++) {
            int m0 = (int) Duration.between(LocalDateTime.of(2020, 6, 16, 23, i), LocalDateTime.of(2021, 6, 15, 0, 0)).toMinutes();
            int m1 = (int) Duration.between(LocalDateTime.of(2020, 11, 1, 18, 15), LocalDateTime.of(2021, 6, 15, 23, 59)).toMinutes();
            float g2 = (float) (325.0 / m0 * m1);
            System.out.println(g2 + " " + i);
            if (g2 >= 202.54) {
                break;
            }
        }

Der effektive Vertragsbeginn muss irgendwann zwischen 16.6.20 23:00 Uhr und 16.6.20 23:30 Uhr gewesen sein...
Verstehe ich nicht so ganz. Der Vertragsbeginn war doch sicherlich am 15.06.2020 um 00:00 Uhr?
 

LimDul

Top Contributor
In der Regel ist die Uhrzeit für die Berechnung egal. Es gibt mehrere Verfahren (siehe meinen Wikipedia Link), wie man man die anteiligen Werte berechnet. Die Uhrzeit ist normalerweise nie wichtig, sondern nur der Tag.
 

beta20

Top Contributor
In deren Beispiel ist die Uhrzeit wohl nicht egal. Vielleicht als Hintergrund: es geht um SaaS Modelle.

Welches Verfahren (Formel) meinst du nun genau? Diese? 30/360 methods

de6ff82172d29c10c75453955eefb2b6ea187209


Um es auf Stunden bzw. Sekunden zu brechen, müsste ich eben noch die Stunden/ Minuten/ Sekunden in die Formel mit aufnehmen?
 

LimDul

Top Contributor
Dann müsstest du klären, wie die Logik funktioniert. Es gibt mehr als eine Möglichkeit sowas zu berechnen. Ergo => Anbieter fragen. Es gibt keine allgemeingültige Formel.
 

mihe7

Top Contributor
Ich habe hier nun nochmal ein paar Referenzwerte:
Super, ich nehme Variante 4) und zahle 325 € (275 € + 50 € Setupgebühr), kündige einen Tag später und erhalte 326,35 € zurück. So mache ich als Kunde einen Gewinn von 1,35 € je Vertrag und Tag.

OK, das ist wieder Kackkram: einmal netto, einmal brutto..
 
Zuletzt bearbeitet:

beta20

Top Contributor
Super, ich nehme Variante 4) und zahle 325 € (275 € + 50 € Setupgebühr), kündige einen Tag später und erhalte 326,35 € zurück. So mache ich als Kunde einen Gewinn von 1,35 € je Vertrag und Tag.
Stimmt. Das sieht komisch aus

Ich habe mir das nun mal anhand dem WIki Eintrag berechnet (30/360 methods).

Java:
    public static void main(String[] args) {
        int days0 = daysBetweenDates(15, 6, 2020, 0, 0, 0, 15, 6, 2021,0,0,0);

        double days1 = calculcateFactor(2, 11, 2020, 0,0, 15, 6, 2021, 0, 0);
        float gutschrift = (float) (325.0 * days1);
        System.out.println(gutschrift);
    }
      
    public static double calculcateFactor(int d1, int m1, int y1, int hour1, int minute1, int d2, int m2,
            int y2, int hour2, int minute2) {
       
        double result =  360 * (y2 - y1) + 30 * (m2 - m1) + (d2-d1) + (hour2 - hour1) + (minute2 - minute1);
        result = result / 360;
       
        return result;
    }

Ich würde jetzt in diesem Fall 201.31944 EUR bekommen.
Denke aber da passt noch was nicht mit den Uhrzeiten?
 

mihe7

Top Contributor
Stimmt. Das sieht komisch aus
Das sieht komisch aus, weil einmal netto und einmal brutto angegeben ist.

Offensichtlich zahlt der Kunde 275+50 € zzgl. 19 % MwSt, überweist also 327,25 € Jahresgebühr und 59,50 € fürs Setup, gesamt also 386,75 €.

Wenn ich nur einen Tag an Leistung beziehe, werden dafür 327,25 € / 365 Tage = 0,8965... € ~= 0,90 € fällig. Ich muss also 59,50 € + 0,90 € = 60,40 € bezahlen, 386,75 € habe ich aber überwiesen, also erhalte ich eine Gutschrift über 386,75 € - 60,40 € = 326,35 € zurück.
 

beta20

Top Contributor
Dann müsstest du klären, wie die Logik funktioniert. Es gibt mehr als eine Möglichkeit sowas zu berechnen. Ergo => Anbieter fragen. Es gibt keine allgemeingültige Formel.

Am liebsten wäre es mir anhand den oben gezeigten Beispiele auf die genannte Summe zu kommen...
Die Logik bzw. die Berechnung / Umsetzung in Java ist mir hier allerdings immer noch nicht klar. Sieht hier jemand den Kniff?

Einer Aussage zu folge passiert in der dessen Software das:
Auch Sekunden und Millisekunden werden anteilig mit berücksichtigt, aber alles wird bei jährlichen und monatlichen Gebührenintervallen auf relative Anteile an einem Monat normiert.

Folgende Aussage ist mir auch noch bekannt, was sich aber auf ein Upgrade bezog:
Der Kunde hat vom 05.05.2019:16:00 - 07.07.2019:11:00 das Produkt verwendet. Daraus ergeben sich 2 Monate + (1+(19/24))/(31), also 2,06451612903
Daraus ergibt sich mit 2,0577957/12=0,171483 der relativ zum Jahr genutzte Anteil
Der ungenutzte Teil 1-0,171483= wird dann anteilig gutgeschrieben -0,828517
In dieser Berechnung sind die Zwischenergebnisse gerundet, in der Praxis könnte der Wert also sehr geringfügig abweichen.
(1+(19/24)) berechnet sich aus der Anzahl an Tagen zwischen 05.07.2019:16:00 - 07.07.2019:11:00, also 1 Tag + 19 von 24 Stunden = 1 + (19/24)
Dieser Wert soll dann auf den relativen Anteil an einem Monat normiert werden. Dafür wird die Anzahl an Tagen zwischen 05.07. und demselben Tag einen Monat später (05.08.) herangezogen. Daraus ergibt sich:
#Tage vom 05.07.-05.08.2019 = 31
 

mihe7

Top Contributor
Folgende Aussage ist mir auch noch bekannt, was sich aber auf ein Upgrade bezog:
...
Der ungenutzte Teil 1-0,171483= wird dann anteilig gutgeschrieben -0,828517
Das ist keine Referenz, das ist Müll. Nochmal: Du verkaufst mir als Kunden eine Leistung und die muss korrekt abgerechnet werden. Gutschriften ergeben sich dann einfach aus Unterschiedsbeträgen (Differenzen).

Nehmen wir mal eine Stromrechung. Da bezahlst Du monatlich einen Abschlag und dann kommt eine Jahresrechnung: Grundpreis + Arbeitspreis * bezogenen kWh + MwSt = Endpreis. Bereits Bezahlt: Summe der Abschläge. Rest: Gutschrift oder Nachzahlung.

In dem Beispiel werden übrigens Monate berechnet, daraus resultiert ein Monatspreis, der unabhängig von der Dauer eines Monats gilt. So bekommt der Mai (31 Tage) den gleichen Preis wie der Juni (30 Tage). Die Dauer innerhalb des Juli wird dann auf 31 Tage bezogen.
 

LimDul

Top Contributor
Was man probieren kann zum nachrechnen, aber da hab ich keine Lust zu:

* Monatspreis = 1/12 des Jahrespreises
* Wenn kein voller Monat, dann Tagespreis 1/28 bis 1/31 des Monatspreises
* Wenn kein voller Tag dann Minutenpreis 1/Anzahl Minuten des Tages vom Tagespreis (Achtung, durch Sommer/Winterzeit kann ein Tag mal 23 und mal 25 Stunden haben)
* Sollte es Sekundengenau sein => Schaltsekunden berücksichtigen (Dann wird es aber absurd)
 

mihe7

Top Contributor
Code:
jshell> Duration.between(ZonedDateTime.parse("2020-10-25T03:00+02:00"), ZonedDateTime.parse("2020-10-25T02:00+01:00")).toMinutes()
$162 ==> 0
 

beta20

Top Contributor
Was man probieren kann zum nachrechnen, aber da hab ich keine Lust zu:

* Monatspreis = 1/12 des Jahrespreises
* Wenn kein voller Monat, dann Tagespreis 1/28 bis 1/31 des Monatspreises
* Wenn kein voller Tag dann Minutenpreis 1/Anzahl Minuten des Tages vom Tagespreis (Achtung, durch Sommer/Winterzeit kann ein Tag mal 23 und mal 25 Stunden haben)
* Sollte es Sekundengenau sein => Schaltsekunden berücksichtigen (Dann wird es aber absurd)

Habe das mal probiert (Endedatum: Endet am: 02.11.2020 um 00:00)

Juni: 15 Tage -> 275 EUR * (1/12) * 15/30 = 11,4583333 EUR
Juli-Oktober -> 275 EUR * 4/12 = 91,666666 EUR
November -> 275 EUR * (1/12) * 2/30 = 1,5277777 EUR
-> 104,652777 EUR (Netto)

275 EUR - 104,652777 = 170,347223 EUR (Netto)
170,347223 * 1,19 = 202,713 EUR

Zum Vergleich was rauskommt in der vorhandenen Software:
Gutschrift: 202,34 EUR
-> Gutschrift wurde mit Faktor 0,61828 berechnet

Woran könnte es noch liegen?
 

LimDul

Top Contributor
Vielen Dank schon Mal für die vielen Antworten.
Ich habe hier nun nochmal ein paar Referenzwerte:
Meiner Meinung werden hier nicht nur Tage betrachtet, sondern auch Stunden / Minuten bzw. vermutlich Sekunden.
Siehe Vergleich 1) und 2)

Jährlich:
Vertragsbeginn: 15.06.20 00:00
Gebührenintervall: jährlich
Gebühr: 275 Euro
Setup Gebühr: 50 Euro

1)
Endet am: 02.11.2020 um 07:10
Abgerechnet bis 15.06.21 00:00
Gutschrift: 202,07 EUR

2)
Endet am: 02.11.2020 um 00:00
Abgerechnet bis: 15.06.21 00:00
Gutschrift: 202,34 EUR
-> Gutschrift wurde mit Faktor 0,61828 berechnet

3)
Vertragsstart:
Endet am: 15.06.2020 um 00:00
Abgerechnet bis: 15.06.21 00:00
Gutschrift: 386,75 EUR

4)
Endet am: 16.06.2020
Abgerechnet bis: 15.06.21 00:00
Gutschrift: 326,35 EUR
-> Gutschrift wurde mit Faktor 0,997222 berechnet
3 und 4 sind Banane. Ich zahle 325 Euro und bekomme eine Gutschrift über 386,75? Das kann nicht stimmen.
 

LimDul

Top Contributor
Habe das mal probiert (Endedatum: Endet am: 02.11.2020 um 00:00)

Juni: 15 Tage -> 275 EUR * (1/12) * 15/30 = 11,4583333 EUR
Juli-Oktober -> 275 EUR * 4/12 = 91,666666 EUR
November -> 275 EUR * (1/12) * 2/30 = 1,5277777 EUR
-> 104,652777 EUR (Netto)

275 EUR - 104,652777 = 170,347223 EUR (Netto)
170,347223 * 1,19 = 202,713 EUR

Zum Vergleich was rauskommt in der vorhandenen Software:
Gutschrift: 202,34 EUR
-> Gutschrift wurde mit Faktor 0,61828 berechnet

Woran könnte es noch liegen?
Juni sind übrigens 16 Tage, wenn der Vertrag am 15. um 0 Uhr beginnt (15 bis 30 sind 16 Tage)
 
K

kneitzel

Gast
Spannende Frage ist dann aber bei einer Minutengenauen Abrechnung, wenn man an dem Tag kündigt
Hat man keine Kündigungsfristen? Es wird also zu einem Tag gekündigt. Damit dürfte doch die Minutengenaue Abrechnung entfallen. Des Weiteren wurde ja auch schon erwähnt, dass dies keinen wirklichen Sinn macht, denn man hat so viel Ungenauigkeit durch Annahmen wie 30 Tage / Monat und so, dass dies einfach keinen Sinn machen würde.

Also wenn ich die Fahrtstrecke zwischen Frankfurt und München wissen will, dann reichen mit die km Angaben. Aber ich lege großen Wert darauf, dass der Anbieter, dessen Daten ich nutze, die Start / Endpunkte auf mind. 1 m genau erfasst hat. Am liebsten gebe ich diese sogar hoch exakt an - also auf <1m genau! (wo kämen wir denn da in, wenn Startpunkt und Endpunkt nicht auf 1m genau festgelegt sind?)
 

LimDul

Top Contributor
Ich komme jetzt auf 202,34€ :)

ZeitraumMonatsbetragTage
15.6-14.7
27,27 €​
27,27 €​
15.7-14.8
27,27 €​
27,27 €​
15.8-14.9
27,27 €​
27,27 €​
15.9-14.10
27,27 €​
27,27 €​
15.10-14.11
27,27 €​
18​
15,83 €​
124,91 €​
202,34 €​
 

LimDul

Top Contributor
es werden Monatsscheiben betrachtet - jeweils vom 15 bis 15 (bzw 14ten 24 Uhr) des Folgetages.

Dafür wird der gerundete Monatsbeitrag verwendet (1/12 von 327,25€)

Der Zeitraum 15.10 bis 14.11 hat 31 Tage, allerdings werden nur 18 davon abgerechnet - 17 im Oktober (15.10-31.10) und der erste November => 18/31 des Monatesbeitrages.
 

LimDul

Top Contributor
Königsdisziplin:

Beginn-Datum am 29.2 (im Schaltjahr), bzw. 31 eines Monates und dann mal schauen wie die Zeitscheiben dann berechnet werden.
 

beta20

Top Contributor
Ich komme jetzt auf 202,34€ :)

ZeitraumMonatsbetragTage
15.6-14.7
27,27 €​
27,27 €​
15.7-14.8
27,27 €​
27,27 €​
15.8-14.9
27,27 €​
27,27 €​
15.9-14.10
27,27 €​
27,27 €​
15.10-14.11
27,27 €​
18​
15,83 €​
124,91 €​
202,34 €​

Perfekt.

Die spannende Frage ist nun natürlich, wie man das nun programmiertechnisch umsetzt.
Am Besten wäre natürlich eine Liste wie oben zu bekommen. Also zuvor eben ein Hilfsobjekt anzulegen. Daraus kann ich ja dann die Gesamtsumme ablesen

Java:
HelperClass {
   private startDate;
   private endDateDate;
   private double fee;
   private int days;
   private value;
}

Java:
private List<HelperClass> calculate(LocalDateTime startDate, LocalDateTime endDate, double monthFee ){

   List<HelperClass> resultList = new ArrayList<>();
   ....
}

Was mir jetzt nicht klar ist, wie errechne ich die verschiedenen Zeiträume:
a) Endedatum eines Monats bekommen. Mit der java.time bin ich noch nicht so wirklich vertraut...
b) Anzahl Tages aktuellen Monats bekommen
Anhang anzeigen 14225
Ich müsste ja vom Startdate ausgehen und dann:
1. Endedatum von dem Monat berechnen
2. Endedatum - Startdatum berechnen
-> davon dann den Wert ausrechnen
-> Objekt zur Liste hinzufügen

LocalDateTime startDate;
while(startDate.before(endDate)){
...
}






 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N .propertiesdatei über Relativen Pfad einlesen lassen Java Basics - Anfänger-Themen 5
Burny91 Resourcen mit relativen Pfadangaben laden Java Basics - Anfänger-Themen 2
N Problem mit relativen Pfadangaben nach dem build Java Basics - Anfänger-Themen 22
M Problem mit relativen Pfad unter Linux Java Basics - Anfänger-Themen 5
S In Eclipse relativen Pfad fuer Tomcat Server erstellen..? Java Basics - Anfänger-Themen 3
megachucky FileInputStream findet nur absoluten Pfad, keinen Relativen ?! Java Basics - Anfänger-Themen 7
S File: relativen Pfad setzten Java Basics - Anfänger-Themen 5
P Komme mit relativen Pfadangaben durcheinander Java Basics - Anfänger-Themen 8
N Methoden Prozentualer Anteil berechnen Java Basics - Anfänger-Themen 37
Torschti Eingabe von Dezimalzahlen (bis zu zwei Kommastellen) Java Basics - Anfänger-Themen 11
A 1 Leerzeichen durch zwei Leerzeichen ersetzen Java Basics - Anfänger-Themen 4
K Warum wird mir hier nach dem ersten Durchlauf zwei mal "welchen Datentyp wollen sie übergeben?" ausgegeben ? Java Basics - Anfänger-Themen 1
sasnitzer java augensumme von zwei würfeln ist 1 Java Basics - Anfänger-Themen 8
krgewb Double mit zwei Nachkommastellen Java Basics - Anfänger-Themen 2
Distanz zwischen zwei Zeichenfolgen in einem String bestimmen Java Basics - Anfänger-Themen 5
D Größtes Palindrom Produkt aus zwei dreistelligen Zahlen Java Basics - Anfänger-Themen 60
berserkerdq2 Habe zwei exceptions, welche ist ein Kommunikationsfehler und welche ein Ausgabefehler? Java Basics - Anfänger-Themen 4
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3
B Erste Schritte Bisektion mit zwei Funktionen? Java Basics - Anfänger-Themen 1
G zwei Instanzen einer Klasse Java Basics - Anfänger-Themen 29
A Java-XSSFBook: zwei Sheets mergen Java Basics - Anfänger-Themen 5
C Zwei Arrays addieren und ausgeben Java Basics - Anfänger-Themen 3
J Speichern von zwei Variablen durch Auslesen aus einem Numberfield Java Basics - Anfänger-Themen 2
D Zwei verschiedene Intellij Projekte, wie benutze ich wechselseitig objekte Java Basics - Anfänger-Themen 8
berserkerdq2 Wie würde man einen regulären Ausdruck in Java schreiben, der prüft, dass zwei bestimtme Zahlen nicht nebeneinadner sind? Java Basics - Anfänger-Themen 3
K mit <<1 kann man mal 2 machen, mit >>2 geteilt durch zwei und was bewirkt <<<1 und >>>1? Java Basics - Anfänger-Themen 5
Dorfschmied Kartesisches Produkt von zwei Liste mit Hashmaps<String,String> erstellen Java Basics - Anfänger-Themen 4
F Abstand zwischen zwei Objekten berechnen wie? Java Basics - Anfänger-Themen 1
M Wie kann ich ein Array in zwei Hälften aufteilen? Java Basics - Anfänger-Themen 12
S Längster Pfad zwischen zwei Vertices in einem Graph Java Basics - Anfänger-Themen 3
S Aktuell beste Methode um zwei Bilder zu vergleichen..? Java Basics - Anfänger-Themen 1
A Zwei XML-Dateien Mergen Java Basics - Anfänger-Themen 14
U Erste Schritte nextGaussian zwischen zwei Werten Java Basics - Anfänger-Themen 19
S Multiplikation von zwei Labels Java Basics - Anfänger-Themen 7
U zwei 2D arrays auf gleich sein überprüfen Java Basics - Anfänger-Themen 14
Bademeister007 Elemente aus zwei verschiedenen Arrays miteinander vergleichen und gegeben falls entfernen Java Basics - Anfänger-Themen 14
Düsseldorf2002 Datentypen Zwei dimensionale LinkedList Java Basics - Anfänger-Themen 8
S Objekte von zwei klassen in zwei verschiedene Textdateien schreiben Java Basics - Anfänger-Themen 5
J Zwei Objekte vergleichen Java Basics - Anfänger-Themen 8
X Zwei Dimensionales Array prüfen Java Basics - Anfänger-Themen 1
G Methoden Informationen aus zwei Objekte bekommen? Java Basics - Anfänger-Themen 6
E Wie gebe ich alle Daten zwischen zwei Zeitpunkten aus? Java Basics - Anfänger-Themen 2
Q Besitzen zwei Strings identische Buchstaben, nur in anderer Reihenfolge? Java Basics - Anfänger-Themen 10
pkm Regexproblem - Wie kann ich zwei oder mehr beliebige Zeichen matchen? Java Basics - Anfänger-Themen 7
A Wieso bekomme ich hier zwei unterschiedliche Ausgaben? Java Basics - Anfänger-Themen 6
H Ein gegebenes Int Array zu Zwei Arrays zurück geben Java Basics - Anfänger-Themen 6
J zwei String Arrays miteinander vergleichen Java Basics - Anfänger-Themen 18
R Methode zwei Sortierkriterien der Klasse Comparator übergeben Java Basics - Anfänger-Themen 4
B Collections.sort mit zwei Bedingungen? Java Basics - Anfänger-Themen 4
X Textdatei: zwei-zeilenweise gleiche Zeilen rausschmeißen Java Basics - Anfänger-Themen 21
M Konkatenation von zwei Strings Java Basics - Anfänger-Themen 6
J Problem beim vergleich von zwei Integer Java Basics - Anfänger-Themen 3
D Input/Output Input von zwei Koordinaten validieren und anschließend Werte speichern Java Basics - Anfänger-Themen 7
L Zwei sortierte Subarrays mit gleicher Länge zusammenfügen Java Basics - Anfänger-Themen 2
F Zwei Dimensionles Array Java Basics - Anfänger-Themen 21
I Alle Elemente von zwei Listen vergleichen Java Basics - Anfänger-Themen 1
J Inhalte von zwei Arrays vertauschen?! Java Basics - Anfänger-Themen 6
O zwei Arrays nach Werten durchsuchen und zusammenfügen Java Basics - Anfänger-Themen 3
A Wie zwei zahlen in einer Variable speichern? Java Basics - Anfänger-Themen 7
N Zwei Daten (Datum) miteinander vergleichen, abspeichern, laden Java Basics - Anfänger-Themen 4
X Threads Zwei Threads, aber doppelte Ausgabe verhindern (synchronized) Java Basics - Anfänger-Themen 54
W Zwei Programme sollen auf eine Klasse zugreifen Java Basics - Anfänger-Themen 18
B Rückgabe von zwei Werten: String und double Java Basics - Anfänger-Themen 14
J Zwei Klassen die sich gegenseitig referenzieren - Bad practice? Java Basics - Anfänger-Themen 4
B Anzahl von Stunden / Tage von zwei Datumswerten ermitteln Java Basics - Anfänger-Themen 1
L Erste Schritte Elemente zwei Schlangen vergleichen Java Basics - Anfänger-Themen 14
N Zwei Strings mit "==" vergleichen warum TRUE Java Basics - Anfänger-Themen 2
D Input/Output InputDialog mit zwei Inputfeldern? Java Basics - Anfänger-Themen 4
D Funktion zwei Arraylisten zu verleichen ob gleich funktioniert nicht Java Basics - Anfänger-Themen 26
S Daten aus zwei Verschiedenen Tabellen in eine ArrayListe Java Basics - Anfänger-Themen 4
D Zwei Strings sind gleich bei if aber nicht true Java Basics - Anfänger-Themen 2
E Best Practice Jar-file mit zwei Klassen und externer Bibliothek über Konsole erzeugen Java Basics - Anfänger-Themen 13
J Logging erzeugt zwei dateien.... Java Basics - Anfänger-Themen 7
S zwei-dimensionales Array Java Basics - Anfänger-Themen 20
R Zwei Attribute gleichzeitig ausgeben Java Basics - Anfänger-Themen 12
javajoshi Problem mit zwei Threads und Arrays (Runnable) Java Basics - Anfänger-Themen 12
T Classpath Zwei gleiche Dateinamen in verschiedenen Projekten möglich? Java Basics - Anfänger-Themen 13
H Bubblesort-Zwei Integer auf Dekade vergleichen. Java Basics - Anfänger-Themen 6
M Wie erzeuge ich die Differenz von zwei Daten in Stunden?? Java Basics - Anfänger-Themen 2
L Den Winkel zwischen zwei Vektoren berechnen! Java Basics - Anfänger-Themen 2
jaleda100 KeyCode – zwei Tasten gleichzeitig Java Basics - Anfänger-Themen 2
M Methoden Zwei Methoden in einem Program laufen lassen...aber wie? Java Basics - Anfänger-Themen 2
M Methoden zwei methoden gleichzeitig laufen lassen Java Basics - Anfänger-Themen 4
M For-Schleife durch zwei versch. Variablen begrenzen Java Basics - Anfänger-Themen 27
B Erste Schritte Problem bei der Verknüpfung von zwei klassen Java Basics - Anfänger-Themen 8
J Methoden Zwei Methoden die fast das gleiche tun organisieren Java Basics - Anfänger-Themen 3
Bluedaishi der Monat zwischen zwei Datumsangaben Java Basics - Anfänger-Themen 15
J Best Practice Datum Differenz aus zwei Strings ermitteln Java Basics - Anfänger-Themen 8
J Ein Objekt and eine Methode übergeben zwei Schreibweisen? Java Basics - Anfänger-Themen 6
R Threads Pause zwischen zwei Schleifen Java Basics - Anfänger-Themen 1
Aprendiendo Zwei Fragen und ein geerbtes "protected"-Attribut Java Basics - Anfänger-Themen 2
S Parameterübergabe zwischen zwei Programme Java Basics - Anfänger-Themen 4
L Rekursiv zwei Strings vergleichen Java Basics - Anfänger-Themen 3
L Classpath Zwei Bibliotheken enthalten gleiche .class Datei Java Basics - Anfänger-Themen 6
S OOP Zwei JSlider in einer Klasse Java Basics - Anfänger-Themen 2
P Aus einem Array zwei Arrays machen Java Basics - Anfänger-Themen 3
ArkHeat Erste Schritte Zwei 2-dimensionale Matritzen addieren Java Basics - Anfänger-Themen 0
S Erste Schritte Zwischen zwei Punkten ein Minimumpkt./Maxima finden Java Basics - Anfänger-Themen 1
T OOP Zwei Klassen Testen (Arrary Iterieren) Java Basics - Anfänger-Themen 6
E Eine Instanzvariable und zwei Objekte Java Basics - Anfänger-Themen 14

Ähnliche Java Themen

Neue Themen


Oben