dengan tepat mengira nombor mingguan tarikh yang diberikan
Jumlah yang betul dari tarikh yang diberikan mungkin menjadi tugas yang rumit, terutama apabila ia merangkumi dua tahun pada hujung minggu. Ini jelas apabila cuba mencari nombor mingguan 31 Disember 2012. Banyak kaedah standard mengembalikan nilai yang salah 53 dan bukannya 1.
Perbezaan ini terletak pada perbezaan antara nombor mingguan ISO8601 dan nombor mingguan .NET. Walaupun .NET membenarkan minggu untuk menjangkau tahun ini, standard ISO tidak dibenarkan.
ISO 8601 Nombor Minggu
Menurut ISO 8601, minggu pertama tahun ini adalah minggu Khamis pertama tahun itu. Ini bermakna bahawa 31 Disember 2012 tergolong dalam minggu pertama tahun 2013.
Penyelesaian dalam bahasa pengaturcaraan yang berbeza
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>
Atas ialah kandungan terperinci Bagaimana cara menentukan bilangan minggu yang tepat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!