Announcement

Collapse
No announcement yet.

different zwischen daten in tag, woche, monat und jahr

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • different zwischen daten in tag, woche, monat und jahr

    hallo zusammen,

    ich habe einen zeitraum z.b. 01.03.2011 bis 14.05.2011.

    ich möchte jetzt wissen wieviel tage, wochen, monate und jahre das sind und zwar nicht in integer sondern double, also z.b. bei monaten 1,4 oder bei jahren 1,8. hintergrung ich möchte den durchnitt eines verbrauchs rechnen.

    wie kann man das am schönsten berechen? schaltjahre sollen auch kein problem darstellen.

    ich habe mir zuerst einmal das ganze in tage ausgerechnet:

    Code:
    int tage = ((TimeSpan) datumende - datumbeginn).Days;
    jetzt könnte ich ja noch das ganze durch 365 für jahre oder durch 12 für monate berechnen.

    meine frage ist jetzt. geht das einfacher? hab ich vielelicht einen fall vergessen der zu falschen ergebnissen führt?

    meine berechnung hier kommt mir zu einfach vor. im inet sind viel kompliziertere umsetzungen.

    grüße

  • #2
    meine frage ist jetzt. geht das einfacher?
    Kommt auf deine Definition von Zeitraum an. Insbesondere die Definition von anteiligem Monat ist nicht eindeutig.

    Wieviel ist den genau 1,4 Monate? Ist Monat einfach = 30 Tage oder wenn du anteilige Monate hast willst du die anteiligen Monate entsprechend Tages genau ausrechnen?

    Beispiele:

    29.7. bis 04.09. -> 37 Tage

    a.) wenn Monate = 30 Tage dann 37/30 -> 1,233... Monate
    b.) wennn Monatsgenau dann 3/31 + 1 + 3/30 -> 1,196 .... Monate

    oder

    15.03. bis 15.04. -> 31 Tage

    a.) 31/30 -> 1,033...
    b.) 17/31 + 14/30 -> 1,015...
    c.) Viele würden aber natürlich auch auf dem Standpunktstehen das das doch genau 1 Monat ist.


    Egal wie du dich entscheidest würde ich dir raten nie mit diesem anteiligen werten zu rechnen sondern immer am besten mit der kleinsten Einheit die du als Ganzzahl darstellst also hier vermutlich Tage. Nur zur kompakteren Anzeige kannst du dann in irgendeine Darstellung mit Jahren, Monaten, Wochen umrechnen und denn jeweiligen Wert dann auch nur als Ganzezahl. Sonst kommst du in einen Erklärungsnotstand. Insbesondere eben bei Monaten.

    PS. Ich habe mich in meinem Beispielen an deine Berechnungsmethodik gehalten heißt eine der beiden Zeitpunkte ist exclusiv(Hier das Bis-Datum). Wenn beide Zeitpunkte inclusiv sein sollen fehlt die bei deiner Rechnung ein Tag.

    Comment


    • #3
      hallo ralf,

      genau das problem habe ich mit den monaten. tage, wochen und jahre sollten kein problem sein. wobei ich mir bei den jahren nicht so ganz sicher mit ob ich da 365 oder 365,25... nehmen muss zum teilen.

      ich habe deine aussage zu den monaten so verstanden, dass wenn ich die monate in einer zeitspanne haben will, ist es notwendig zu schauen welche monate in dem zeitraum haben 30, 31, 28 bzw 20 tage? ist das richtig so. dazu gibt es keine methoden diese automatisch zu berechnen?

      mein ziel ist einen durchschnittlichen verbrauch je tag, wochen, monat und jahr. dazu muss ich aber doch mit kommazahlen arbeiten, weil ich sonst den genauen durchschnitt nicht erhalte, oder steh ich da gerade auf dem schlauch?

      grüße und danke

      Comment


      • #4
        dazu gibt es keine methoden diese automatisch zu berechnen?
        DateTime hat eine DaysInMonth Methode.

        ist das richtig so
        Es ist weder richtig noch falsch. Da es keine vorgefertigte eindeutige Definition für ein Fließkommadarstellung für Monat, Jahre etc. gibt(und keine für die Umrechnung zwischen den Größen) musst du dir eine ausdenken, daran halten und dem User irgendwie vermitteln wie den z.B. 1.4 Monate zu interpretieren sind (1 Monat 1 Woche und 2 Tage würde er vermutlich verstehen 1.4 Monate sind unklar) . Ich habe ein paar Vorschläge für mögliche Definitionen gemacht. Aber keinen richtig<->falsch Vergleich. Das einzige was eindeutig ist sind ganze Tage, Wochen etc. anteilige Darstellungen musst du definieren.

        wobei ich mir bei den jahren nicht so ganz sicher mit ob ich da 365 oder 365,25... nehmen muss zum teilen.
        Gleiches Problem. Du definierst welchen Wert für Jahr du annimmst wenn du Tage in Jahre umrechnest.

        Comment


        • #5
          hallo,

          DateTime hat eine DaysInMonth Methode.
          ich glaub ich bin zu blöd, aber wie finde ich die denn?

          Code:
           DateTime datetime = new DateTime();
           datetime.DaysInMonth()
          die methode finde ich nicht :-(

          grüße und danke

          Comment


          • #6
            ich glaub ich bin zu blöd, aber wie finde ich die denn?
            http://msdn.microsoft.com/de-de/library/system.datetime.daysinmonth%28v=vs.100%29.aspx
            Christian

            Comment


            • #7
              hallo,

              ahh, die ist static, dass hab ich nicht gesehen.

              Comment


              • #8
                hallo,

                im grunde heißt das , ich muss die monate selber berechnen und kann nicht auf eine fertige funktion zurückgreifen die mir aus zwei datetime objekten die monate berechnet und evt. nicht nur die differenz in gleitkomma darstellt also z.b. 1,4 monate sondern sogar in folgernder form "1 monat, 3 tage".

                ich wollte mir die arbeit ersparen das ganze zu fuß zu machen und das rad neu zu erfinden!

                grüße und gute nacht!

                Comment


                • #9
                  Ich habe jetzt 2mal versucht zu erklären das es da keine definiertes Verhalten gibt. Oder noch genauer es kein eindeutiges Verhalten geben kann. Wie soll es dann eine fertige Lösung geben? Für was? Erst wenn du weißt wie es sich Verhalten soll kannst du nach einer fertigen Lösung Ausschau halten. Aber sind wir mal ehrlich das lohnt nicht. Es werden vermutlich Einzeiler bleiben. Du musst halt nur mal überlegen was die genau auswerfen soll.

                  Warum muss ich hier an diesen Dilbert denken

                  Comment


                  • #10
                    ich wollte mir die arbeit ersparen das ganze zu fuß zu machen und das rad neu zu erfinden!
                    Für was? Für eine Division zweier Werte, die du durch programmieren selbst bestimmen musst? Irgendwann ist halt bei der besten IDE und Framework das Klicken zu Ende...da muss man programmieren.

                    Eine "Erfindung" für deine Rechtschreibung hingegen wäre sinnvoll
                    Zuletzt editiert von Christian Marquardt; 01.03.2012, 07:38.
                    Christian

                    Comment


                    • #11
                      Die Sucherei und Fragerei dauert länger als das Neuprogrammieren

                      Und das Ganze, um einen Durchschnitt zu berechnen? Reicht da nicht der Gesamtverbrauch und die Anzahl der Tage? Dann hat man den Durchschnitt pro Tag und kann den Verbrauch in X Tagen ausrechnen. Wen interessiert der Verbrauch in 1,29 Jahren?
                      Günther

                      Comment


                      • #12
                        Erledigt!

                        hallo,

                        sorry, ich wollte hier nicht für verärgerung sorgen!!

                        vielleicht habe ich mich zu dumm angestellt.

                        ich wollte einfach nur wissen ob es eine fertige lösung dazu gibt. wie ich das jetzt lesen kann, ist dies nicht so.

                        danke und grüße!

                        Comment


                        • #13
                          Ich stimme den bereits erfolgen Antworten zu, dass es hier Möglichkeit für Spielräume geben mag.
                          Aber am allgemeingültigsten scheint doch zunächst mal der Ansatz, sowohl Schaltjahre als auch die unterschiedlich langen Monate mit einzubeziehen:

                          d.h.:
                          4 Jahre = 365*4+1 = 1461 Tage
                          1 Jahr = 365.25 Tage (1461 / 4)
                          1 Monat = 30,4375 Tage (1461 / 48)
                          1 Woche = 7,024... Tage (1461 / 208)
                          1 Tag = 1 Tag (1461 / 1461)

                          aus selbigem ergibt sich ja dann auch der entsprechende "Einzeiler".

                          Comment


                          • #14
                            Bis auf das mit der Woche, da solltest du nochmal drüber nachdenken das ist doch einer der ganz eindeutigen Fälle , würde ich einen ähnlichen Ansatz wählen.


                            Edit: Ich schalte mal aus Konsistenzgründen kurz in den Pedanten-Mode in dem ich mich auch zu Anfang dieses Threads befunden habe Ein Schaltjahr alle 4 Jahre ist auch nur ein Näherungswert von dieser Basis aus auf die anderen Längen zu schließen beinhaltet natürlich einen systematischen Fehler. Die korrekte Basis wären 400 Jahre in denen 3 der 100 möglichen Schaltjahre ausfallen. Also 1 durchschnittliches Jahr wären dann (365*400+97)/400 = 365,2425 Tage (im Gregorianischen Kalender). Was immerhin um 0.0075 Tage von deinem Wert abweicht. Alle deine Durchschnittswerte wären somit um 0.02 Promille, in Worten null komma null zwei Promille, falsch. Pedanten-Mode off.
                            Zuletzt editiert von Ralf Jansen; 01.03.2012, 19:25.

                            Comment


                            • #15
                              Eine Woche sind für mich immer exakt 7 Tage, egal ob Schaltjahr oder nicht...
                              Günther

                              Comment

                              Working...
                              X