Calculez avec précision le numéro hebdomadaire de la date donnée
Le nombre correct de la date donnée peut être une tâche délicate, surtout lorsqu'elle s'étend sur deux ans le week-end. Cela est évident lorsque vous essayez de trouver le numéro hebdomadaire du 31 décembre 2012. De nombreuses méthodes standard renvoient des valeurs incorrectes 53 au lieu de 1.
Cette différence réside dans la différence entre le numéro hebdomadaire ISO8601 et le numéro hebdomadaire .NET. Bien que le .NET ait permis à la semaine de s'étendre sur l'année, la norme ISO n'a pas été autorisée.
Numéro de semaine ISO 8601
Selon l'ISO 8601, la première semaine de l'année est la semaine du premier jeudi de l'année. Cela signifie que le 31 décembre 2012 appartient à la première semaine de 2013.
Solution dans différents langages de programmation
c #
<code class="language-C#">// 假设一周从星期一开始 // 第 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); } // 现在,我们知道这一周的星期四在这一周内,我们可以计算周数 return CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(time, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday); }</code>
<code class="language-python">import datetime def get_iso_week_number(date): """ 获取日期的 ISO 8601 周数。 :param date: 要获取周数的日期。 :type date: datetime.datetime :return: ISO 8601 周数。 :rtype: int """ year, week, _ = date.isocalendar() return week</code>
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!