Vielen Dank an Wolfgang Weber für dieses Snppet !
//------------------------------------------------------------
// Die deutschen Kalenderwochen berechnen sich wie folgt:
// Der 1. Januar eines Jahres gehört erst dann zur ersten
// Kalenderwoche, wenn dieser Tag auf einen Montag,
// Dienstag, Mittwoch oder Donnerstag fällt.
// Falls der 1.Januar ein Freitag, Samstag oder Sonntag ist,
// zählt er, und ggf. auch der 2. und 3. Januar, noch zur
// letzten Kalenderwoche des vorherigen Jahres.
//
// Weiterhin können der 29., 30. und 31.12. eines Jahres schon
// zur Kalenderwoche 1 des neuen Jahres gehören.
// Das ist genau dann der Fall, wenn der 31.12. auf einen
// Montag, Dienstag oder Mittwoch fällt.
//
// Bemerkungen zur Berechnung der Wochennummer nach DIN 1355:
//
//
// Der Montag ist der erste Tag der Woche
// Der 4. Januar liegt immer in der ersten Kalenderwoche.
// Der 28. Dezember liegt immer in der letzten Kalenderwoche.
// aus diesen Definitionen folgt:
//
// Eine Woche gehört zu demjenigen Kalenderjahr, in dem 3
// oder mehr Tage der Woche liegen.
// Der Donnerstag einer Woche liegt immer in demjenigen
// Kalenderjahr, dem die Woche zugerechnet wird.
//------------------------------------------------------------
int __fastcall GetCalWeekNo(TDateTime dtDate)
{
unsigned short usYear, usMonth, usDay = 0;
dtDate.DecodeDate(&usYear,&usMonth,&usDay);
int CalWeekNo = (int)((int)(dtDate - TDateTime(usYear, 1, 1) + 1 +
(DayOfWeek(TDateTime(usYear, 1, 1)) % 7) - 3) / 7) + 1;
if((CalWeekNo == 53) && ((DayOfWeek(TDateTime(usYear, 12, 31)) - 1) % 7) <= 3)
CalWeekNo = 1;
return CalWeekNo;
}
|