【问题标题】:Get Date Range by week number c# [duplicate]按周数获取日期范围c# [重复]
【发布时间】:2012-01-31 02:32:58
【问题描述】:

可能重复:
In .net, knowing the week number how can I get the weekdays date?

你好,

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

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

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

我真的希望你们能帮帮我,我只是在任何地方都找不到遮阳篷!

提前致谢。

【问题讨论】:

标签: c# .net datetime date calendar


【解决方案1】:

注意

我似乎错过了错误。当前代码已于 2012 年 1 月 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 月而第 1 周有时可能发生在 12 月这一事实有关。您需要对此进行调整,这是一种方法。

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

【讨论】:

  • 如果我输入 yyyy=2012, ww=1 和 d=Monday(1),您的代码将返回 1 月 9 日而不是 1 月 2 日,这是正确的。
  • 在这里查看我的答案:stackoverflow.com/a/9064954/153390
  • 那很不幸,我记得重新编写这段代码并创建了很多测试,但这是旧的,显然不正确,但是你的小改动似乎有效,我没有能力测试这个更彻底,所以我会相信你自己做了,并纠正了我自己的答案;)
  • 从 1900 年 1 月 1 日到 3000 年 12 月 31 日每天都对其进行测试 :)
【解决方案2】:
  • 找出一年中的第一天是一周中的哪一天(例如,在 2011 年是星期六)
  • 添加必要的天数以成为下周一(2 天)
  • 从今天开始,加上(周数 - 1)* 7 天,得到您感兴趣的一周的第一天 - 显示这一天和接下来的几天以获得整个星期

【讨论】:

    【解决方案3】:

    这样的事情应该可以解决问题

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

    【讨论】:

    • 不会投反对票 - 但约翰的以下解决方案是正确的。这一切都在 ISO 文件中列出......
    • 是的,这太简单了,有时会计算错误的日期。
    猜你喜欢
    • 1970-01-01
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多