【问题标题】:Get Week number from a given date when week start on Sunday从星期天开始的给定日期获取周数
【发布时间】:2018-05-18 06:48:07
【问题描述】:

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

例如:

6 May 2018 - 12 May 2018 是第 18 周

13 May 2018 - 19 May 2018 是第 19 周

我正在尝试以下扩展方法,但无法达到预期的效果。它给出了第 19 周和 20 周,我预计分别是第 18 周和 19 周。

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

【问题讨论】:

标签: c# .net asp.net-mvc date week-number


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    你需要改变方法的参数

    CultureInfo.InvariantCulture.Calendar.GetWeekOfYear()

    CalendarWeekRule.FirstFourDayWeek -&gt; CalendarWeekRule.FirstFullWeek

    根据 FirstFullWeek 的文档 - 表示一年中的第一周从一年中第一天或之后的一周中指定的第一天的第一次出现开始。

    喜欢这个

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

    【讨论】:

      猜你喜欢
      • 2017-07-19
      • 2020-03-24
      • 2011-10-07
      • 1970-01-01
      • 1970-01-01
      • 2018-02-05
      • 1970-01-01
      • 2018-07-25
      • 1970-01-01
      相关资源
      最近更新 更多