获取以52为最高周数的日期的周数

本文关键字:日期 周数 高周数 获取 | 更新日期: 2023-09-27 18:09:37

我需要得到日期的周数。

我知道这个问题已经被问过很多次了,但这里所有的答案都是对我来说没用,因为他们返回。net周数或iso8601 weeknumber。

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

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

在谷歌搜索返回很多答案,像这个答案的一个例子,但没有一个我发现返回这些结果,所以我希望有人能帮助我这个或指出我在正确的方向。

编辑:另一种解释是:

就像你对另一个人说,一年的最后一天有人会说这是第52周,一年的第一天有人会说第1周。没有人会说这是第53周。
对于2012年1月2日,人们会说我们在今年的第2周,而不是第1周

编辑:我终于说服了我的老板,这是不实际的,甚至是不可能的。这个帖子里的答案和评论是我用来说服别人的,所以你们都帮助了我,毕竟

获取以52为最高周数的日期的周数

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

  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}");
  }

您尝试过任何代码吗?你说的没有意义,虽然周从周一开始,1月2日在周二并不意味着这是一年的第二个周,一年中的周数意味着你想知道过去了多少周,也就是说你要把天数除以7。我的意思是,周数并不取决于工作日的开始,而是取决于过去了多少个7天。为此,你有两种方法来实现:1 -首先从日期中提取天数,然后将其除以7得到周数。第二步,制作一个开关盒,按日期划分周。虽然在单一情况下,第二种方法可能会证明更快,但第一种方法被证明更容易将其转换为代码,不用说两者都有点太长了,如果你不明白要做什么或如何做注释,所以我把每一种代码的前几行。