Maison >développement back-end >C++ >Comment obtenir le numéro de semaine ISO-8601 correct pour une date donnée?
Défi :
Déterminer le nombre correct de semaines pour une date donnée peut être délicat, surtout lorsqu'il s'agit de dates de fin d'année. Les méthodes .NET existantes ne respectent souvent pas la norme ISO-8601 et attribuent des numéros de semaine incorrects à certaines dates.
Mauvais numéro de semaine :
Par exemple, l'approche .NET pourrait marquer le 31 décembre 2012 comme la semaine 53, mais cela est incorrect selon la norme ISO-8601. Cette différence vient du fait que .NET permet aux semaines de s'étendre sur des années, contrairement à ISO-8601.
Solution :
Pour obtenir le bon numéro de semaine ISO-8601, utilisez la fonction suivante :
<code class="language-csharp">// 假设周从星期一开始。 // 第 1 周是当年包含星期四的第一周。 public static int GetIso8601WeekOfYear(DateTime time) { DayOfWeek day = CultureInfo.InvariantCulture.Calendar.GetDayOfWeek(time); if (day >= DayOfWeek.Monday && day <= DayOfWeek.Wednesday) { time = time.AddDays(3 - (int)day); } else if (day > DayOfWeek.Wednesday) { time = time.AddDays(10 - (int)day); } return CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(time, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday); }</code>
Description du principe :
Cette fonction ajuste la date lorsqu'elle tombe un lundi, un mardi ou un mercredi, en garantissant qu'elle représente la même semaine que le jeudi, vendredi ou samedi à venir. Cette méthode est conforme à la norme ISO-8601 qui définit la semaine 1 comme la première semaine contenant un jeudi.
Exemple :
Pour la date du 31 décembre 2012 mentionnée dans le défi, cette fonction renvoie 1, qui est le numéro de semaine correct selon la norme ISO-8601.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!