Les évènements seront donc stockés dans des sous-dossiers invisibles apellés "Index" car ils serviront à réduire le périmètre des recherches. Le nom de ces dossiers sera le numéro de la semaine. Il faut donc un nouveau service qui renvoit l'année et le numéro de semaine.
Le calcul de ce numéro est délicat car il est différemment selon les pays ou les organisations.
XT2 considérait que la semaine n°1 était celle qui contenait le 01/01.
XT3 appliquait la norme ISO 8601 qui définit la semaine n°1 comme celle qui contient au moins 4 jours (donc elle contient toujours le premier jeudi de l'année).
L'algorithme utilisé dans XT3 était en fait celui d'XT2 avec des corrections :
Code : Tout sélectionner
// Détermination du lundi de la semaine de la date
Input_Monday := Input_Date - XSD_GetWeekdayNumber(Input_Date) + 1;
// Détermination du lundi de la semaine contenant le 01/01
Jan01_Date := XSD_GetLimit(Input_Date, 'First', 'Year');
Jan01_Monday := Jan01_Date - XSD_GetWeekdayNumber(Jan01_Date) + 1;
// Calcul du nombre de jours puis de semaines entre les deux lundis
Number := Trunc(Input_Monday) - Trunc(Jan01_Monday);
Number := Number div 7;
// Correction si le 01/01 est avant un jeudi
if XSD_GetWeekdayNumber(Jan01_Date) < 4
then Inc(Number);
// Correction si le nombre est nul : appel récursif une semaine avant
if Number = 0
then Number := XSD_GetWeekNumber(Input_Date - 7) + 1;
Un nouveau service basé sur cet algorithme va donc être implémenté. Il travaille directement avec les jeudis donc n'a pas besoin de corrections.