【问题标题】:Get the weeknumber for a date with 52 as the highest weeknumber获取以 52 作为最高周数的日期的周数
【发布时间】:2016-09-30 15:46:07
【问题描述】:

我需要获取日期的星期数。

我知道这个问题之前被问过很多次,但这里的所有答案都是 对我没有用,因为他们返回 dotnet weeknumber 或 iso 8601 周数。

我需要的是更具挑战性的。
让我用最简单的示例数据来解释一下:

input date    desired weeknumber
01-jan-2012          1
02-jan-2012          2
31-dec-2012         52
01-jan-2013          1
06-jan-2013          1
07-jan-2013          2
31-dec-2013         52
01-jan-2014          1
05-jan-2014          1
06-jan-2014          2

我希望这能说明我需要什么。
就像您在打印的日历上写周数但第一周/最后一周拆分为 1/52 而不是 53

在 google 中搜索会返回很多类似 example of answer 的答案,但我发现没有一个会返回这些结果,所以我希望有人可以帮助我或为我指明正确的方向。

编辑:另一种解释方式是这样的:

就像你对另一个人说的那样看待它,一个人会说是第 52 周,一年中的第一天会说是第 1 周。一个人永远不会说这是周53.
对于 2012 年 1 月 2 日,有人会说我们在今年的第 2 周,而不是第 1 周

编辑:我终于说服了我的雇主,这是不切实际的,甚至是不可能的。 这个线程中的答案和 cmets 是我用来说服的,所以你们都帮了我很好

【问题讨论】:

  • 你的问题没有意义。如果您从星期一开始新的一周,并将 2012 年 1 月 1 日定义为第 1 周,那么 2012 年 1 月 2 日开始第 2 周,那么 2012 年 12 月 24 日开始第 53 周,2012 年 12 月 31 日开始第 54 周,而不是第 52 周。
  • 为什么 2012 年 12 月 31 日从第 54 周开始呢?
  • @user5090812 我编辑了我的问题,试图解释我的意思
  • 366/7=52.28,所以总会有第 53 周,不是吗?哪怕只有两天。
  • 取出一个 2012 年的日历,并在其中计算每个星期一,从 1 月 2 日的 2、1 月 9 日的 3 等开始。您将在 12 月 31 日计算 54。跨度>

标签: c#


【解决方案1】:

我不确定我是否正确理解了您的帖子,但也许这可能是一个解决方案:

  var dates = new[]
  {
    new DateTime(2012, 1, 1),
    new DateTime(2012, 1, 2),
    new DateTime(2012, 12, 31),
    new DateTime(2013, 1, 1),
    new DateTime(2013, 1, 6),
    new DateTime(2013, 1, 7),
    new DateTime(2013, 12, 31),
    new DateTime(2014, 1, 1),
    new DateTime(2014, 1, 5),
    new DateTime(2014, 1, 6),
  };

  var calendar = CultureInfo.CurrentCulture.Calendar;

  foreach (var date in dates)
  {
    var day = calendar.GetDayOfYear(date);
    var week = calendar.GetWeekOfYear(date, CalendarWeekRule.FirstDay, DayOfWeek.Monday);
    week = week > 52 ? 52 : week;
    Console.WriteLine($"{date.Date}: {day,3}: {week,3}");
  }

【讨论】:

    【解决方案2】:

    您是否尝试过任何代码?你说的没有道理,虽然星期从星期一开始,1月2日星期二并不意味着它是第二周,一年中的周数意味着你想知道已经过去了多少周,这意味着你必须将天数除以 7。 我的意思是,周数不取决于工作日的开始,而是取决于过去了多少个 7 天。 为此,您有两种实现方式: 1st - 首先从日期中提取天数,然后将其除以 7 以获得周数。 第二 - 创建一个 switch case ,并按日期划分星期。 尽管在单一情况下第二种方式可能会更快,但第一种方式被证明更容易将其转换为代码,不用说两者都太长了,如果你不明白该做什么或如何做评论所以我把每个人的代码的前几行。

    【讨论】:

    • 我知道 2012 年 1 月 2 日(星期一)不是第二周,而是第一周。问题是我必须像描述的那样做这个,我在这里找到了很多关于如何从约会中获取周数的答案,但从来没有这样。这也不是我的选择
    • 所以你使用其中一种方法,只需添加一个控制方法来检查什么是 daybit,如果需要更改这些答案,我的选择是使用 switch case 而不是多个 ifs
    • 检查我在问题中的最新更新。多亏了这个帖子,我说服了我的雇主放弃这个想法
    • 我建议您自己删除该问题,由其他用户关闭它可能没有负面影响,但它会在您的询问列表中列为已关闭
    猜你喜欢
    • 2020-07-17
    • 1970-01-01
    • 2020-07-14
    • 2022-06-29
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多