可能有重复:
在 .net 中,知道周数如何获取工作日日期?
你好,
我有一个问题想要问你们。如何获取给定周数的日期范围。
例如: 如果我输入第 12 周,输出应该是:
21-03-2011
22-03-2011
23-03-2011
24-03-2011
25-03-2011
26-03-2011
27-03-2011
我真的希望你们能帮助我,我无论如何都找不到答案!
提前感谢。
注意
我似乎错过了一个错误。截至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)的日期。
类似这样的应该就可以解决问题了
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);
}