C++ Builder Snippets  

Berechnung der Kalenderwochen nach DIN:
 
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;
}



© '99-2000 by S. Kreutzmann