AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Jahre mit 53 Wochen

Ein Thema von Wolfgang Mix · begonnen am 19. Sep 2009 · letzter Beitrag vom 20. Sep 2009
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von Wolfgang Mix
Wolfgang Mix

Registriert seit: 13. Mai 2009
Ort: Lübeck
1.222 Beiträge
 
Delphi 2005 Personal
 
#1

Jahre mit 53 Wochen

  Alt 19. Sep 2009, 17:27
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
Wolfgang Mix
if you can't explain it simply you don't understand it well enough - A. Einstein
Mein Baby:http://www.epubli.de/shop/buch/Grund...41818516/52824
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Jahre mit 53 Wochen

  Alt 19. Sep 2009, 17:50
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
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von Wolfgang Mix
Wolfgang Mix

Registriert seit: 13. Mai 2009
Ort: Lübeck
1.222 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Jahre mit 53 Wochen

  Alt 19. Sep 2009, 17:56
Danke, einverstanden, es gibt immer noch etwas zum Verbessern,
deswegen sind wir ja in der DP

Gruß

Wolfgang
Wolfgang Mix
if you can't explain it simply you don't understand it well enough - A. Einstein
Mein Baby:http://www.epubli.de/shop/buch/Grund...41818516/52824
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Jahre mit 53 Wochen

  Alt 19. Sep 2009, 17:58
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
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Wolfgang Mix
Wolfgang Mix

Registriert seit: 13. Mai 2009
Ort: Lübeck
1.222 Beiträge
 
Delphi 2005 Personal
 
#5

Re: Jahre mit 53 Wochen

  Alt 19. Sep 2009, 18:00
Wolfgang Mix
if you can't explain it simply you don't understand it well enough - A. Einstein
Mein Baby:http://www.epubli.de/shop/buch/Grund...41818516/52824
  Mit Zitat antworten Zitat
Benutzerbild von Wolfgang Mix
Wolfgang Mix

Registriert seit: 13. Mai 2009
Ort: Lübeck
1.222 Beiträge
 
Delphi 2005 Personal
 
#6

Re: Jahre mit 53 Wochen

  Alt 19. Sep 2009, 23:46
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
Wolfgang Mix
if you can't explain it simply you don't understand it well enough - A. Einstein
Mein Baby:http://www.epubli.de/shop/buch/Grund...41818516/52824
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#7

Re: Jahre mit 53 Wochen

  Alt 20. Sep 2009, 09:14
ä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
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.269 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Jahre mit 53 Wochen

  Alt 20. Sep 2009, 09:59
Hallo,

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

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

...

DayOfTheWeek(date1)=DoW_XXX
Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Jahre mit 53 Wochen

  Alt 20. Sep 2009, 11:07
Da gab es doch bereits DayThursday etc., oder irre ich mich?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Wolfgang Mix
Wolfgang Mix

Registriert seit: 13. Mai 2009
Ort: Lübeck
1.222 Beiträge
 
Delphi 2005 Personal
 
#10

Re: Jahre mit 53 Wochen

  Alt 20. Sep 2009, 11:16
Das war z.B. der letzte Donnerstag eines Monats aus meinen Dateutils.

Grüß

Wolfgang
Wolfgang Mix
if you can't explain it simply you don't understand it well enough - A. Einstein
Mein Baby:http://www.epubli.de/shop/buch/Grund...41818516/52824
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 20:23 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