Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Neuen Beitrag zur Code-Library hinzufügen (https://www.delphipraxis.net/33-neuen-beitrag-zur-code-library-hinzufuegen/)
-   -   Delphi Jahre mit 53 Wochen (https://www.delphipraxis.net/140513-jahre-mit-53-wochen.html)

Wolfgang Mix 19. Sep 2009 16:27


Jahre mit 53 Wochen
 
Jahre mit 53 Wochen

Aktualisierte Fassung hier 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:
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.
Gruß

Wolfgang

mirage228 19. Sep 2009 16:50

Re: Jahre mit 53 Wochen
 
Die Funktionen lassen sich auch etwas kompakter darstellen :)

Delphi-Quellcode:
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;
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 :)

Viele Grüße

Wolfgang Mix 19. Sep 2009 16:56

Re: Jahre mit 53 Wochen
 
Danke, einverstanden, es gibt immer noch etwas zum Verbessern,
deswegen sind wir ja in der DP :-)

Gruß

Wolfgang

DeddyH 19. Sep 2009 16:58

Re: Jahre mit 53 Wochen
 
Zitat:

Zitat von mirage228
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 :)

Es sei denn, man hat die vollständige Prüfung aktiviert ;)

Wolfgang Mix 19. Sep 2009 17:00

Re: Jahre mit 53 Wochen
 
:-D

Wolfgang Mix 19. Sep 2009 22:46

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

rollstuhlfahrer 20. Sep 2009 08:14

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

hoika 20. Sep 2009 08:59

Re: Jahre mit 53 Wochen
 
Hallo,

Delphi-Quellcode:
DayOfTheWeek(date1)=4
Das würde ich als Anfänger nicht verstehen ...

const DoW_XXX = 4; // XXX darf der Coder noch festlegen ;)

...

Delphi-Quellcode:
DayOfTheWeek(date1)=DoW_XXX

Heiko

DeddyH 20. Sep 2009 10:07

Re: Jahre mit 53 Wochen
 
Da gab es doch bereits DayThursday etc., oder irre ich mich?

Wolfgang Mix 20. Sep 2009 10:16

Re: Jahre mit 53 Wochen
 
Das war z.B. der letzte Donnerstag eines Monats aus meinen Dateutils.

Grüß

Wolfgang


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:49 Uhr.
Seite 1 von 2  1 2      

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