![]() |
Jahre mit 53 Wochen
Jahre mit 53 Wochen
Aktualisierte Fassung hier ![]() gibt es immer dann, wenn der 1.1. oder der 31.12. des Jahres auf einen Donnerstag fallen. Zur Verwendung habe ich 2 Routinen geschrieben, Is53Weeks1 und Is53Weeks2. Die erste ist plattformunabhängig, die zweite benötigt Delphi.
Delphi-Quellcode:
Gruß
implementation
{$R *.dfm} //Wolfgang Mix - Delphi-Praxis //ISO-Standard 8601 function Is53weeks1(y:word):boolean; var date1,date2:TDate; begin date1:=EncodeDate(y,1,1); date2:=EncodeDate(y,12,31); if (DayOfTheWeek(date1)=4) or (DayOfTheWeek(date2)=4) then result:=true else result:=false; end; //Wolfgang Mix - Delphi-Praxis //ISO-Standard 8601 function Is53weeks2(y:word):boolean; var date:TDate; begin date:=EncodeDate(y,1,1);// must be If(WeeksInYear(date)=53) then result:=true else result:=false; end; procedure TForm1.Button1Click(Sender: TObject); var year:integer; begin Edit1.Text:=BoolToStr(Is53Weeks1(2009)); end; end. Wolfgang |
Re: Jahre mit 53 Wochen
Die Funktionen lassen sich auch etwas kompakter darstellen :)
Delphi-Quellcode:
Vorteil besonders bei ersterem ist, dass EncodeDate im zweiten Teil des OR gar nicht erst aufgerufen wird, falls der erste schon zum Ergebnis führt :)
function Is53weeks1(y: word): boolean;
begin Result := (DayOfTheWeek(EncodeDate(y, 1 , 1)) = 4) or (DayOfTheWeek(EncodeDate(y, 12, 31)) = 4); end; function Is53weeks2(y: word): boolean; begin Result := (WeeksInYear(EncodeDate(y,1,1)) = 53); end; Viele Grüße |
Re: Jahre mit 53 Wochen
Danke, einverstanden, es gibt immer noch etwas zum Verbessern,
deswegen sind wir ja in der DP :-) Gruß Wolfgang |
Re: Jahre mit 53 Wochen
Zitat:
|
Re: Jahre mit 53 Wochen
:-D
|
Re: Jahre mit 53 Wochen
Ich belasse es trotzdem bei meiner 1. Version, damit auch Beginner eine Chance haben,
den Code zu verstehen. (Kommt wieder der Pauker in mir durch) Gruß Wolfgang |
Re: Jahre mit 53 Wochen
änderst du dann auch deinen wohl offensichtlich fehlerbehafteten Quellcode der Version 1 ab, sodass die Logik dahinter wieder stimmt? Wenn du diesen Vergleich wie in Version 1 machst, dann hast du im Deutschen ja ein UND zwischen den beiden Vergleichsoperatoren. Wieso wird dann aus dem UND ein ODER im Englischen (siehe Post 2)?
Bernhard |
Re: Jahre mit 53 Wochen
Hallo,
Delphi-Quellcode:
Das würde ich als Anfänger nicht verstehen ...
DayOfTheWeek(date1)=4
const DoW_XXX = 4; // XXX darf der Coder noch festlegen ;) ...
Delphi-Quellcode:
DayOfTheWeek(date1)=DoW_XXX
Heiko |
Re: Jahre mit 53 Wochen
Da gab es doch bereits DayThursday etc., oder irre ich mich?
|
Re: Jahre mit 53 Wochen
Das war z.B. der letzte Donnerstag eines Monats aus meinen Dateutils.
Grüß Wolfgang |
Re: Jahre mit 53 Wochen
Ja, mir ging es ja nur darum, dass man die Konstanten für die Wochentage nicht unbedingt neu definieren muss (aber natürlich kann), da diese doch bereits in DateUtils definiert sind. Aber Heiko hat schon recht, mit sprechenden Konstanten ist der Code für Außenstehende einfacher zu verstehen.
|
Re: Jahre mit 53 Wochen
Hallo,
jepp, das meinte ich. Der Anfänger weiss z.B. nicht, dass die Wochentage mit Sonntag als 0 definiert seind. *erstmal grillen* ;) Heiko |
Re: Jahre mit 53 Wochen
@hoika
Zitat aus Post #1: Zitat:
Zitat:
der kommt sehr schnell darauf, daß die Zählung bei WeekOfTheYear bei Montag = 1 beginnt Gruß und guten Appetit :wall: Wolfgang |
Re: Jahre mit 53 Wochen
Hallo Wolfgang,
reg Dich doch nicht auf, es sollte ja keine Kritik sein. Nur wenn diese Funktion irgendwann einmal ohne den zugehörigen Kommentar zitiert wird, ist es doch zugegebenermaßen einfacher zu verstehen, dass der Donnerstag der Casus Knacktus ist, wenn eine sprechende Konstante verwendet wird, meinst Du nicht auch? Es macht den Code ja nicht schlechter, sondern nur schneller nachvollziehbar. |
Re: Jahre mit 53 Wochen
Ich rege mich nicht auf. ;-)
Wollte nur klarmachen, daß DayOfTheWeek definitiv mit Montag = 1 startet. War wohl mit DayOfWeek verwechselt worden. Gruß Wolfgang |
Re: Jahre mit 53 Wochen
Gerade wegen dieser Verwechslungsgefahr bietet es sich doch an, die 4 gegen DayThursday oder eine selbst definierte Konstante auszutauschen, oder? :zwinker:
|
Re: Jahre mit 53 Wochen
Einverstanden :-D
Gruß Wolfgang |
Re: Jahre mit 53 Wochen
Schön, dass wir einmal drüber gesprochen haben :lol: :cheers:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:40 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