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

时间:2016-09-30 15:46:08

标签: c#

我需要获得一个约会的周数。

  

我知道之前已经多次询问过,但这里的所有答案都是   对我来说没有用,因为他们返回了dotnet周数或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.
对于02-jan-2012,一个人会说我们在今年的第2周,而不是在第1周

编辑:我终于说服了我的雇主,这不实际,甚至不可能。 这个帖子中的答案和评论是我用来说服的,所以你们所做的一切都很好地帮助了我

2 个答案:

答案 0 :(得分:0)

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

  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 :(得分:0)

你试过任何代码吗?你所说的没有意义,虽然星期一星期几开始,星期二1月2日并不意味着它是第二周的年份,一年中的星期数意味着你想知道已经过了几周,这意味着你必须把天数减去7。 我的意思是周数不依赖于工作日的开始,这取决于已经过了多少7天。 为此,您有两种实现方式: 第一个 - 首先从日期中提取日期编号,然后将其分配到7以获取周数。 第二 - 创建一个开关案例,并按日期分配几周。 虽然在单一情况下,第二种方式可能会更快,但第一种方式证明更容易将其变成代码,不用说两者都有点太长,如果你不明白该做什么或怎么做就评论如此我把每个代码的前几行。