从周日开始的给定日期获取周数

Get Week number from a given date when week start on Sunday

当我一周的第一天是星期天时,如何从给定日期获取一年中的正确周数。

例如:

6 May 2018 - 12 May 2018 是第 18 周

13 May 2018 - 19 May 2018 是第 19 周

我正在尝试以下扩展方法,但无法达到预期的效果。它给出了周 1920 我预计周 1819分别。

public static int GetWeekOfYear(this DateTime date)
{
    return CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(
      date, 
      CalendarWeekRule.FirstFourDayWeek, 
      DayOfWeek.Sunday);
}

您需要更改方法的参数

CultureInfo.InvariantCulture.Calendar.GetWeekOfYear()

CalendarWeekRule.FirstFourDayWeek -> CalendarWeekRule.FirstFullWeek

as per Document for FirstFullWeek - Indicates that the first week of the year begins on the first occurrence of the designated first day of the week on or after the first day of the year.

像这样

public static int GetWeekOfYear(DateTime date)
{
    return CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(date, CalendarWeekRule.FirstFullWeek, DayOfWeek.Sunday);
}

CalendarWeekRule Enumeration: 定义不同的规则来确定一年中的第一周。

您之前使用的是:

CalendarWeekRule.FirstFourDayWeek

需要替换为:

CalendarWeekRule.FirstFullWeek

因为:

代码片段:

public static void Main()
{
    var week_test = Convert.ToDateTime("05/06/2018");
    var week_test2 = Convert.ToDateTime("05/13/2018");
    List<DateTime> weekList = new List<DateTime>();
    weekList.Add(week_test);
    weekList.Add(week_test2);
    CultureInfo ciCurr = CultureInfo.CurrentCulture;
  foreach(var week in weekList)
  {
    int weekNum = ciCurr.Calendar.GetWeekOfYear(week, CalendarWeekRule.FirstFullWeek, DayOfWeek.Sunday);
    Console.WriteLine(weekNum);
  }
}

输出:

演示:

dotNetFiddle