public static int ISOWeekNumber(DateTime dt) { int yyyy = dt.Year; int mm = dt.Month; int dd = dt.Day; // Declare other required variables int jan1WeekDay; int weekNumber = 0; int weekDay = 0; int i, j, k, l, m, n; int[] mnth = new int[12] { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 }; int yearNumber; // Set DayofYear Number for yyyy mm dd int dayOfYearNumber = dd + mnth[mm - 1]; // Increase of Dayof Year Number by 1, if year is leapyear and month is february if ((IsLeapYear(yyyy)) && (mm == 2)) dayOfYearNumber += 1; // Find the Jan1WeekDay for year i = (yyyy - 1) % 100; j = (yyyy - 1) - i; k = i + i / 4; jan1WeekDay = 1 + (((((j / 100) % 4) * 5) + k) % 7); // Calcuate the WeekDay for the given date l = dayOfYearNumber + (jan1WeekDay - 1); weekDay = 1 + ((l - 1) % 7); // Find if the date falls in YearNumber set WeekNumber to 52 or 53 if ((dayOfYearNumber <= (8 - jan1WeekDay)) && (jan1WeekDay > 4)) { yearNumber = yyyy - 1; if ((jan1WeekDay == 5) || ((jan1WeekDay == 6) && (jan1WeekDay > 4))) weekNumber = 53;else weekNumber = 52; } else yearNumber = yyyy; // Set WeekNumber to 1 to 53 if date falls in YearNumber if (yearNumber == yyyy) { if (IsLeapYear(yyyy) == true) m = 366; else m = 365; if ((m - dayOfYearNumber) < (4 - weekDay)) { yearNumber = yyyy + 1; weekNumber = 1; } } if (yearNumber == yyyy) { n = dayOfYearNumber + (7 - weekDay) + (jan1WeekDay - 1); weekNumber = n / 7; if (jan1WeekDay > 4) weekNumber -= 1; } return (weekNumber); } public static bool IsLeapYear(int yyyy) { return ((yyyy % 4 == 0 && yyyy % 100 != 0) || (yyyy % 400 == 0)); }
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.