Discuter:ISO 8601
Un article de Wikipédia, l'encyclopédie libre.
exemple en asp A Bergamini, Fonction Semaine Calcul le numéro de semaine d'une date
Function Semaine(StrDate ) Jeudi=StrDate+4-weekday(StrDate,2) Janvier4=Cdate("04/01/"&Year(Jeudi)) Lundi4=Janvier4-Weekday(Janvier4,2) NbJ=Jeudi-Lundi4 Semaine=Right("0"&round(NbJ/7+.5),2) End Function
(ajouté par une IP, déplacé en page de discussion par / DC2 • )
Code en VisualBasic.Net 1 et 2 basé sur le source fourni en ASP
Function NumeroSemaine(ByVal dtDate As Date) As Int32
' Retourne le numéro de la semaine conformement à la norme ISO8601
Dim iNumSemaine As Int32
Dim dtJeudi As Date = DateAdd(DateInterval.Day, 4, dtDate)
Dim iJourSemaine As Int32 = JourSemaine(dtDate)
dtJeudi = DateAdd(DateInterval.Day, -iJourSemaine, dtJeudi)
Dim dtJanvier4 As Date = New Date(dtJeudi.Year, 1, 4)
Dim dtLundi4 As Date = DateAdd(DateInterval.Day, -JourSemaine(dtJanvier4), dtJanvier4)
Dim iNbJour As Int32 = DateDiff(DateInterval.Day, dtLundi4, dtJeudi)
iNumSemaine = Right("0" & Math.Round(iNbJour / 7 + 0.5), 2)
Return iNumSemaine
End Function
Private Function JourSemaine(ByVal dtDate As Date) As Int32
' Retourne le jour de la semaine du lundi (1) au dimanche (7)
Dim iJourSemaine As Int32 = dtDate.DayOfWeek
If iJourSemaine = 0 Then iJourSemaine = 7
Return iJourSemaine
End Function
Code en VisualBasic.Net
Nous proposons une autre fonction de calcul, basée sur une expression simplifiée de l'algorithme de référence. La date courante est rapportée au jeudi de la semaine courante. Par exemple, pour un lundi, on se rapporte au jeudi suivant ; pour un dimanche, on se rapporte au jeudi précédent. Le numéro de la semaine courante est égal au nombre de semaines complètes entre ce jeudi courant et le début de l'année (de ce jeudi-là) + 1. Autrement dit, cela correspond au numéro de jour de l'année de ce jeudi courant divisé par 7 (le nombre de jours dans une semaine)(division arrondie à l'entier inférieur) et plus 1 (premier numéro de semaine dans l'année).
Public Function Semaine(ByVal D As Date) As Integer
Return CInt(D.AddDays(D.DayOfWeek.Thursday - NormaliserJourSemaine(D.DayOfWeek)).DayOfYear / 7) + 1
End Function
Public Function NormaliserJourSemaine(ByVal J As Integer) As Integer
'.NET ne respecte pas la norme ISO : il retourne 0 pour dimanche
If J = 0 Then Return 7 Else Return J
End Function
Voici une proposition pour Visual C++ en utilisant la classe COleDateTime.
#include <afxdisp.h>
int ReturnNumOfWeek(int Year, int Month, int Day)
{
COleDateTime Curtime,Le4janv ;
int JeudiDay,lelundidelapremsem,NumWeek;
if(Curtime.SetDate(Year, Month, Day)) // Si fonction retourne 1 alors erreur et retour -1
return -1;
//Calcul du jeudi associé au jour de la semaine courante
JeudiDay = Curtime.GetDayOfYear() + 4 - (int)fmod(Curtime.GetDayOfWeek()-2+7,7);
//Création de l'objet COleDateTime correpondant au 04/01 de l'année en cours
Le4janv = COleDateTime(Curtime.GetYear(),01,04,0,0,0);
//Calcul du lundi associé
lelundidelapremsem = 8 - (int)fmod(Le4janv.GetDayOfWeek()-2+7,7);
//Calcul du numéro de la semaine en cours
NumWeek = int(((double)JeudiDay-(double)lelundidelapremsem)/7.0+0.5)+1;
return NumWeek;
}
[modifier] Il manque des choses
Il serait utile d'avoir la date de création de la norme, et des exemples de commandes permettant d'obtenir la date à ce format.--195.83.89.138 (d) 11 février 2008 à 16:36 (CET)