Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Problem mit MonthOf (https://www.delphipraxis.net/171095-problem-mit-monthof.html)

SvB 19. Okt 2012 19:39

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:
EncodeDateWeek(2013, 1, 1) // = 31.12.2012 - richtig
MonthOf(StrToDate('31.12.2012')) // = 12 - falsch
Mache ich jetzt einen Denkfehler oder rechnet Delphi falsch? Ich habe das mit XE und XE3 probiert und das Ergebnis ist das selbe.
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?

himitsu 19. Okt 2012 19:54

AW: Problem mit MonthOf
 
Was soll daran falsch sein?

vom 31.12.2012 ist der Monat nunmal die 12 :gruebel:

Popov 19. Okt 2012 20:08

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.

SvB 19. Okt 2012 20:19

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:
if berechneteKW = 1 then Monat = 1
if berechneteKW = 52 or 53 then Monat = 12
ansonsten Monat = MonthOf
damit sollte es passen.

Popov 19. Okt 2012 20:44

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.

SvB 20. Okt 2012 08:00

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.

Bummi 20. Okt 2012 08:10

AW: Problem mit MonthOf
 
Die Abbildung ist gegf. uneindeutig, vielleicht kann der Nutzer bei der Eingabe angeben wohin zugeordnet werden soll

himitsu 20. Okt 2012 08:15

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.

Sir Rufo 20. Okt 2012 09:01

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 ;)

Popov 20. Okt 2012 09:19

AW: Problem mit MonthOf
 
Oder mal so:

Delphi-Quellcode:
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;
Ist das Ergebnis True, ist es ein Jahr, sonst zwei. Dann bleibt es an dir welcher dich interessiert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:31 Uhr.
Seite 1 von 2  1 2      

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