![]() |
Problem mit MonthOf
Ich bin gerade etwas verwirrt. Ich benötige den Monat einer Woche. Um dies zu erreichen benutze ich MonthOf(EncodeDateWeek(2013, 1, 1)). Beispielhaft:
Delphi-Quellcode:
Mache ich jetzt einen Denkfehler oder rechnet Delphi falsch? Ich habe das mit XE und XE3 probiert und das Ergebnis ist das selbe.
EncodeDateWeek(2013, 1, 1) // = 31.12.2012 - richtig
MonthOf(StrToDate('31.12.2012')) // = 12 - falsch Wenn ich mir den Kalender ansehe, dann ist der 31.12.2012 aber schon in der KW 1/2013, was meiner Meinung nach ja auch richtig ist. Hat jemand eine Idee, wie ich das lösen kann? |
AW: Problem mit MonthOf
Was soll daran falsch sein?
vom 31.12.2012 ist der Monat nunmal die 12 :gruebel: |
AW: Problem mit MonthOf
Die KW wird so berechnet, dass die KW zwischen zwei Jahren die mit KW 1 angesehen wird, in der mehr Tage der Woche zu finden sind. Da in der letzten Woche des Jahres 2012 nur noch ein Tag (31.12.) zu finden ist, ist er bereits KW 1. Sind vier Tage der Woche noch im letzten Jahr, ist der 01.01. meinetwegen KW 53.
|
AW: Problem mit MonthOf
Ja, wenn man vor lauter Fehlersucherei dann ein Brett vorm Kopf hat und nicht weiter kommt.
Klar 12 = 12. Tja wenn ich halt den Monat der ersten KW in 2013 heraus bekommen möchte und es kommt dann 12 heraus, steht man erst mal dumm da. Ich denke das ich es wie folgt mache:
Delphi-Quellcode:
damit sollte es passen.
if berechneteKW = 1 then Monat = 1
if berechneteKW = 52 or 53 then Monat = 12 ansonsten Monat = MonthOf |
AW: Problem mit MonthOf
Nur mal so dahin gefragt, vielleicht verstehe ich nur deine Aufgabe nicht, aber warum berechnest du den Monat über die Kalenderwoche? Du wirst wahrscheinlich schon dein Gründe haben, aber abhängig von dem was du vorhast kann dein Code ungenau sein. Denn wenn die erste KW noch im letzten Jahr ist, dann ist das so. Wenn das aber unwichtig ist, dann bezeichne es nicht als KW, sondern Lfd. Woche im Jahr.
Letztendlich kannst du sicher ein, dass zumindest ein Teil der KW 1 im neuen Jahr ist, aber die erste Woche des Jahres kann auch KW 53 sein. |
AW: Problem mit MonthOf
Hintergrund ist folgender: In einer einer Erfassungsmaske kann der Benutzer das Feld "Lieferwoche" eingeben. Alle Auswertungen die gemacht werden beziehen sich aber auf Monate. Deshalb speichere ich den Monat der Lieferwoche mit in die Tabelle, damit ich über SQL einfacher die Daten ziehen kann.
In meinem Beispiel der KW 1/2013 müsste demnach als Monat der Januar gespeichert werden. So wie ich das bisher berechnet habe (habe ja keine andere Möglichkeit) kommt aber Dezember raus und das gibt Probleme, denn die Auswertung gehört in den Januar. Ich muss das ganze so abbilden wie das auf einem Kalender angezeigt wird. Wie ich im Code gesehen habe (hat ein anderer geschrieben) wird die KW 53 auch gar nicht berücksichtigt, da habe ich auch noch ein Problem. Das muss ich am Montag mit meinem neuen Programmier noch mal durchgehen, bzw. mit dem Kunden noch mal abklären. Ich merke gerade dass ich das Problem nicht nur beim Jahreswechsel habe, das kann auch innerhalb vom Jahr passieren, denn ich beziehe mich immer auf den Anfang einer Woche. Na ja, da gibt es noch einmal etwas Arbeit. Aber trotzdem Danke für die Hilfe. |
AW: Problem mit MonthOf
Die Abbildung ist gegf. uneindeutig, vielleicht kann der Nutzer bei der Eingabe angeben wohin zugeordnet werden soll
|
AW: Problem mit MonthOf
Was du machen könntest, ist erstmal über EncodeDateWeek den Anfang der Woche zu bestimmen,
dann besorgst du dir aber den letzen Tag der Woche (+6) und zum Schluß besorgst du dir davon über MonthOf den Monat. Oder doch nur +4, da für die Zugehörigkeitsbestimmung der Jahres ja die halbe Woche genutzt wird, also mindestens 4 Tage. |
AW: Problem mit MonthOf
Man muss sich einfach nur absprechen was etwas bedeutet und das umsetzen, dann wird auch niemand überrascht. Man kann sich an allgemeingültige Konventionen halten, wenn es welche gibt, oder auch mit diesen brechen, wenn es gefordert wird. Es muss nur klar sein.
Beispiel: Definition Jahr für die Auswertung: Ist das Jahr des 1. Tages der Kalenderwoche Definition Monat für die Auswertung: Ist der Monat des 1. Tages der Kalenderwoche Definition 1. Tag der Kalenderwoche: Die Kalenderwoche startet am Montag Definition Kalenderwoche: ... Ab in die Dokumentation und so umsetzen. Ohne das braucht man eine Menge Mate-Tee und einen Sack voll Problemkerzen ;) |
AW: Problem mit MonthOf
Oder mal so:
Delphi-Quellcode:
Ist das Ergebnis True, ist es ein Jahr, sonst zwei. Dann bleibt es an dir welcher dich interessiert.
function JahreDerKW(const AYear, AWeekOfYear: Word; var AYear1, AYear2: Word): Boolean;
var Dummy: Word; begin DecodeDate(EncodeDateWeek(AYear, AWeekOfYear, 1), AYear1, Dummy, Dummy); DecodeDate(EncodeDateWeek(AYear, AWeekOfYear, 7), AYear2, Dummy, Dummy); Result := AYear1 = AYear2; end; procedure TForm1.Button1Click(Sender: TObject); var Year1, Year2: Word; begin if JahreDerKW(2013, 1, Year1, Year2) then ShowMessage(Format('KW ist in einem Jahr: %d', [Year1])) else ShowMessage(Format('KW ist in zwei Jahren: %d und %d', [Year1, Year2])); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz