按周数获取日期范围 c#

8

可能有重复:
在 .net 中,知道周数如何获取工作日日期?

你好,

我有一个问题想要问你们。如何获取给定周数的日期范围。

例如: 如果我输入第 12 周,输出应该是:

21-03-2011
22-03-2011
23-03-2011
24-03-2011
25-03-2011
26-03-2011
27-03-2011

我真的希望你们能帮助我,我无论如何都找不到答案!

提前感谢。


1
在.NET中,已知周数,如何获取该周的工作日日期? - Saurabh Gokhale
3个回答

12

注意

我似乎错过了一个错误。截至2012-01-30,当前代码已进行更新以解决这个问题,并且现在基于星期二推导daysOffset,根据Mikael Svenson的说法,这似乎解决了这个问题。

这些 ISO8601 周日期计算有点奇怪,但是这是正确的做法:

DateTime jan1 = new DateTime(yyyy, 1, 1); 

int daysOffset = DayOfWeek.Tuesday - jan1.DayOfWeek; 

DateTime firstMonday = jan1.AddDays(daysOffset); 

var cal = CultureInfo.CurrentCulture.Calendar; 

int firstWeek = cal.GetWeekOfYear(jan1, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);

var weekNum = ww;

if (firstWeek <= 1) 
{ 
    weekNum -= 1; 
}

var result = firstMonday.AddDays(weekNum * 7 + d - 1);

return result;

基本上是计算一个参考点,然后加上天数,难点在于第53周有时会出现在一月份,而第1周有时会出现在十二月份。你需要进行相应的调整,这是一种方法。

上面的代码计算了一年(yyyy)、周数(ww)和星期几(d)的日期。


如果我输入yyyy=2012,ww=1和d=Monday(1),你的代码将返回Jan 9th而不是正确的Jan 2nd。 - Mikael Svenson
请查看我的答案:https://dev59.com/YXRB5IYBdhLWcg3wUFvB#9064954 - Mikael Svenson
很不幸,我记得重新编写了这段代码并创建了许多测试,但这是旧的代码,显然不正确。你的小改动似乎起作用了,而我没有能力更彻底地测试它,所以我会相信你自己做出了这个改变并纠正我的答案 ;) - John Leidegren
已经测试了从1900年1月1日到3000年12月31日的每一天 :) - Mikael Svenson

5
  • 找出每年的1月1日是星期几(例如,2011年的1月1日是星期六)
  • 添加所需的天数以成为下一个星期一(2天)
  • 从这一天开始,添加(周数-1)* 7天,以获取您感兴趣的第一周的第一天 -显示这一天再加上接下来的几天,以获取整个星期

0

类似这样的应该就可以解决问题了

        DateTime d = new DateTime(someYear, 1, 1);
        d.AddDays(numWeeks * 7);
        for (int x = 0; x < 7; x++)
        {
            Console.WriteLine(d.ToShortDateString());
            d.AddDays(1);
        }

不会点踩,但是John在下面提供的解决方案是正确的。这一切都在ISO文件中详细说明了... - Martin Milan
是的,这太简单了,有时会计算错误的日期。 - John Leidegren

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接