trouver intervale de dates d'un n° de semaine pour une année x

trouver intervale de dates d'un n° de semaine pour une année x - ASP - Programmation

Marsh Posté le 13-01-2006 à 16:15:29    

bonjour
 
comment a part d'un n° de semaine et du nombre de l'année
je peux trouver de quelle date a quelle date se deroule la semaine
 
ex:
semaine : 3
année : 2005
resultat: semaine du 03/03/2005 au 10/03/2005
 
merci

Reply

Marsh Posté le 13-01-2006 à 16:15:29   

Reply

Marsh Posté le 15-01-2008 à 10:31:19    

ca m'interresse aussi, merci pour ceux qui ont la reponse.
;)

Reply

Marsh Posté le 15-01-2008 à 11:43:21    

Petit exemple en C#.
 
(Le calendrier est afficher à des fins de contrôle uniquement)
http://img149.imageshack.us/img149/9379/calweekcz8.png
 

Code :
  1. private void Date_ValueChanged(object sender, EventArgs e)
  2.        {
  3.            // Récupération de la culture actuelle
  4.            System.Globalization.CultureInfo ci = System.Threading.Thread.CurrentThread.CurrentUICulture;
  5.  
  6.            // Déjà, on crée une date avec un jour approximativement proche
  7.            // de la date choisie :
  8.            // Règle bidon donc : année = celle choisie, et jour de l'année environ (semaine choisie -1) * 7
  9.            DateTime date = new DateTime(
  10.              (int)numericUpDown2.Value,
  11.              (int)Math.Max(1, (numericUpDown1.Value - 1 * 7) / 30),
  12.              (int)Math.Max(1, (numericUpDown1.Value - 1 * 7) % 30)
  13.            );
  14.  
  15.            // Maintenant, la partie crade... On ajoute un jour jusqu'à ce qu'on ait la bonne semaine
  16.            while (ci.Calendar.GetWeekOfYear(date, ci.DateTimeFormat.CalendarWeekRule, ci.DateTimeFormat.FirstDayOfWeek) < numericUpDown1.Value)
  17.            {
  18.                date = date.AddDays(1);
  19.            }
  20.            monthCalendar1.SetDate(date);
  21.            label1.Text = date.ToLongDateString();
  22.            label2.Text = date.AddDays(6).ToLongDateString();
  23.        }


 
Ce code est lancé lorsque je change la valeur d'une des deux listes numériques. La première correspond au numéro de semaine, et la seconde à l'année.
 
Attention, les règles des semaines sont spécifiques à la culture du poste client, attention donc à passer les paramètres correctement (ici, je reprend la locale utilisé par le programme, ce qui n'est pas aussi simple à faire en VB6).
 
L'algo n'est pas parfait, car pour la première semaine de l'année, au lieu de commencer au lundi, il commence au 1° janvier. Il faut donc ajouter une verrue pour gérer ce cas spécifique.


Message édité par MagicBuzz le 15-01-2008 à 12:03:33
Reply

Marsh Posté le 15-01-2008 à 15:22:34    

merci mais j'ai trouvé. C'est un petit code tout simple qui fonctionne parfaitement (en ASP donc).
il donne la date du premier lundi associé au numero de semaine: (A partir de la on peut facilement faire une periode):
Function DateLundi(Sem, Annee)
  'Retrouve la date suivant une semaine demandée
  'Trouve la position du lundi de la premiere semaine de l'année
  'ensuite on le soustrait avec le nb de semaine converti en jour
  X = (Sem * 7) - (Weekday("01/01/" & Annee, vbMonday) + 6)

 

 'Decale le premier jour de l'annee avec la valeur qu'on a trouvé
  DateLundi = DateAdd("d", X, "01/01/" & Annee)
End Function


Message édité par Nuwanda le 15-01-2008 à 15:24:24
Reply

Marsh Posté le 15-01-2008 à 15:58:35    

fait gaffe au différentes façon de récupérer la semaine de l'année.
 
en effet, en europe, c'est la première semaine d'au moins 4 jours qui est la semaine 1.
 
ainsi, le 01/01 peut être dans la semaine 52.
 
teste ce cas, ton code marche peut-être, mais c'est un cas à prendre en compte dans tes tests ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed