![]() |
Kalenderwochenberechnung USA
Hi Leute,
irgendwie stelle ich mich heute zu blöd an, daher hoffe ich das mir einer von euch helfen kann. Ich weiß das ich zB. mit der JclDateTime -> Funktion "ISOWeekNumber" oder mit "WeekOfTheYear" die Kalenderwoche berechnen kann. Und zwar die ISO 8601 gültige. Ich würde jedoch die Amerikanische benötigen. (Wochenbegin Sonntag, Erste Sonntag = KW 1) In VB geht dies mit KW = Format(Datum, "ww", VbSunday, VbFirstJan1) Weiß jemand wie ich dies in Delphi bewerkstellige? Danke für jede Hilfe! PS: Als Beispieldaten: 01.01.1994 --> SA --> EU (KW 52) 01.01.1994 --> SA --> USA (KW 52) 01.02.1994 --> SO --> EU (KW 52) 01.02.1994 --> SO --> USA (KW 1) |
Re: Kalenderwochenberechnung USA
Ohne groß geprüft zu haben:
![]() |
Re: Kalenderwochenberechnung USA
Hi,
danke für den Tipp, jedoch ist die Berechnung dort "falsch". Sie liefert mir beim Prüfen von den zwei Testdati leider jedesmal die KW 1 zurück. Müsste 1x KW52 und 1x KW1 bei "US" zurückliefern. Trotzdem Danke! Vielleicht weiß noch jemand was? Werde auf jedenfall weiter suchen bzw. grübeln, vielleicht stehe ich ja heute nicht auf der "Leitung" :( ... |
Re: Kalenderwochenberechnung USA
Hat mir bei ähnlichem geholfen:
![]() |
Re: Kalenderwochenberechnung USA
Hi,
danke für eure Hilfe. (bzw. die Links) Habe es nun so glaube ich gelöst:
Delphi-Quellcode:
Nochmals DANKE! Grüße
function GetWeekNumberUS(const aDateTime: TDateTime): string;
var Y,M,D:Word; dtTmp:TDateTime; dtLastYear: TDateTime; strTempResult: string; begin DecodeDate(aDateTime,Y,M,D) ; dtTmp := EnCodeDate(Y,1,1) ; strTempResult := IntToStr((Trunc(aDateTime-dtTmp)+(DayOfWeek(dtTmp)-1)) DIV 7); //Wenn Result = 0 dann ist es die letzte Kalenderwoche vom "Vorjahr". if strTempResult = '0' then begin //Jahr um 1 verringern, da man im "letzten" Jahr die letzte Woche ermitteln muss. Y := Y - 1; //31.12 vom Vorjahr ermitteln dtLastYear := EnCodeDate(Y,12,31) ; //1.1. vom Vorjahr ermitteln dtTmp := EnCodeDate(Y,1,1) ; //KW Berechnung strTempResult := IntToStr((Trunc(dtLastYear-dtTmp)+(DayOfWeek(dtTmp)-1)) DIV 7); end; //Result ist genau die Kalenderwoche Result := strTempResult; //Oder wenn man will mit Jahreszahl formatiert if StrToInt(strTempResult) < 10 then strTempResult := '0' + strTempResult; Result := FormatDateTime('yyyy',dtTmp) + 'W' + strTempResult; end; |
Re: Kalenderwochenberechnung USA
Nach gibt es eine 53. Kw immer dann, wenn der 1.1.d.J. oder der 31.12.d.J. auf einen Donnerstag fallen.
Wie ist das beim US-Kalender? |
Re: Kalenderwochenberechnung USA
Hallo sirarcher,
ich empfehle dringend, die Variable strTempResult und den Rückgabewert als int zu behandeln (das erspart auch einige IntToStr-Umwandlungen). Du willst eine Zahl bestimmen, dann arbeite doch auch damit (und nur damit). In den Fällen, in denen du wirklich einen String brauchst, kannst du an der betreffenden Stelle umwandeln; das ist eine Frage der konkreten Anforderung, aber nicht eine Frage der Berechnung. Wenn du das häufiger brauchst, dann empfiehlt sich eher eine Variante GetWeekNumberUSAsString, die nur die beiden Formatierungen vornimmt und die Berechnung in function GetWeekNumberUS(): int; belässt. Gruß Jürgen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:55 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