AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

WeekofTheYear ?

Ein Thema von Delbor · begonnen am 20. Nov 2020 · letzter Beitrag vom 20. Nov 2020
Antwort Antwort
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#1

WeekofTheYear ?

  Alt 20. Nov 2020, 12:39
Delphi-Version: 10.4 Sydney
Hi zusammen

Ich habe vor vielen Jahren einen Kalender programmiert und dachte mir, ich müsse den nur ein kleines bisschen Anpassen - aber Pustekuchen!! Statt nun die damaligen Strukturen umzubauen, schreib ich mir besser eine neue Prozedur, die sich aus Teilen aus DateUtils logisch - und wahrscheinlich mit weniger Code - aufbaut.
Und so begine ich, indem ich den Jahresbegin als TDateTime hole. Davon will ich nun auf die aktuelle Woche und deren begin zugreifen

Delphi-Quellcode:
procedure TCompletYear2Frame.VerticalMonths;
   var i,j,k,Nr,x,y,ZV : Integer; Jahr,Woche: Word;
   LToday : String;
   LYearDate, WoStart,Datum:TDateTime;
begin
   LYearDate := StartOfTheYear(Date);
   Nr := WeekOfTheYear(LYearDate);
   // WeekofTheYear gibt einen Integer für die Wochennummer(?) zurück, der in 'Nr' gespeichert wird.
   WoStart := StartOfTheWeek(NR);
   // So, wie ich die Help verstanden habe, gibt StartOfTheWeek das Anfangsdatum der abgefragten Woche zurück
   // WoStart müsste demnach das Start-Datum der Woche enthalten
   Showmessage('LYearDate := ' + DatetoStr(LYearDate) + sLineBreak +
               'WeekOfTheYear := ' + IntToStr(Nr) + sLineBreak +
               'WoStart := '+ DateToStr(WoStart));
end;

Und das kommt dabei heraus:
Zitat:
LYearDate := 01.01.2020
WeekOfTheYear := 1
WoStart := 25.12.1899
[OK]
Was, zum ..., mache ich falsch?

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: WeekofTheYear ?

  Alt 20. Nov 2020, 12:46
WeekOfTheYear ist nicht eindeutig, da je nachdem, wo man sich befindet (Land) entweder die 1. Woche oder die Woche mit dem 1. Montag (bzw. 1 Tag der Woche) gemeint ist.

EDIT: Du Funktion ist schon eindeutig, ist aber u.U. nicht das gewünschte.

Durch Verwendung der 2. überladenen Variante kann man das Fehlverhalten aber erkenn und korrigieren.
Markus Kinzler

Geändert von mkinzler (20. Nov 2020 um 12:49 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.120 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: WeekofTheYear ?

  Alt 20. Nov 2020, 12:46
Was, zum ..., mache ich falsch?
StartOfTheWeek(..) erwartet ein TDateTime. Du steckst irgendeine Nummer rein die kein TDateTime ist.

http://docwiki.embarcadero.com/Libra...StartOfTheWeek
http://docwiki.embarcadero.com/Libra....WeekOfTheYear

WeekOfTheYear ist nicht eindeutig
WeekOfTheYear(..) orientiert sich, wie in der Doku beschrieben, an ISO8601 und nicht an länderspezifischen Regeln, ist also schon eindeutig.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.451 Beiträge
 
Delphi 7 Professional
 
#4

AW: WeekofTheYear ?

  Alt 20. Nov 2020, 13:06
Delphi-Quellcode:
   LYearDate := StartOfTheYear(Date); // => 01.01.2020
   Nr := WeekOfTheYear(LYearDate); // => 1 = 1. Woche des Jahres 2020
   WoStart := StartOfTheWeek(Nr); // => Start der Woche in den der 30.12.1899 fällt.
                                  // (TDateTime = 1 => 30.12.1899)
                                  // und diese Woche begann am 25.12.1899.
   // Probier es doch mal mit dem Beginn der Woche, in die der 01.01.2020 gefallen ist ;-)
   WoStart := StartOfTheWeek(LYearDate); // => Start der ersten Woche des Jahres 2020
  Mit Zitat antworten Zitat
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 19:20 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