AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit MonthOf

Ein Thema von SvB · begonnen am 19. Okt 2012 · letzter Beitrag vom 25. Okt 2012
Antwort Antwort
Seite 1 von 2  1 2      
SvB

Registriert seit: 21. Okt 2004
Ort: Eckenroth
426 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#1

Problem mit MonthOf

  Alt 19. Okt 2012, 19:39
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?
Sven

Alle sagen, das geht nicht. Da kam einer, der wusste das nicht und hat es gemacht.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.166 Beiträge
 
Delphi 12 Athens
 
#2

AW: Problem mit MonthOf

  Alt 19. Okt 2012, 19:54
Was soll daran falsch sein?

vom 31.12.2012 ist der Monat nunmal die 12
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#3

AW: Problem mit MonthOf

  Alt 19. Okt 2012, 20:08
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.
  Mit Zitat antworten Zitat
SvB

Registriert seit: 21. Okt 2004
Ort: Eckenroth
426 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#4

AW: Problem mit MonthOf

  Alt 19. Okt 2012, 20:19
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.
Sven

Alle sagen, das geht nicht. Da kam einer, der wusste das nicht und hat es gemacht.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#5

AW: Problem mit MonthOf

  Alt 19. Okt 2012, 20:44
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.
  Mit Zitat antworten Zitat
SvB

Registriert seit: 21. Okt 2004
Ort: Eckenroth
426 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

AW: Problem mit MonthOf

  Alt 20. Okt 2012, 08:00
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.
Sven

Alle sagen, das geht nicht. Da kam einer, der wusste das nicht und hat es gemacht.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#7

AW: Problem mit MonthOf

  Alt 20. Okt 2012, 08:10
Die Abbildung ist gegf. uneindeutig, vielleicht kann der Nutzer bei der Eingabe angeben wohin zugeordnet werden soll
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.166 Beiträge
 
Delphi 12 Athens
 
#8

AW: Problem mit MonthOf

  Alt 20. Okt 2012, 08:15
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (20. Okt 2012 um 08:17 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: Problem mit MonthOf

  Alt 20. Okt 2012, 09:01
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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#10

AW: Problem mit MonthOf

  Alt 20. Okt 2012, 09:19
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz