【问题标题】:Get DateTime for the nth Sunday after today获取今天之后的第 n 个星期日的 DateTime
【发布时间】:2011-05-10 18:19:34
【问题描述】:

我正在使用以下方法获取当前周数:

var weekNo = CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(DateTime.UtcNow,
                                                  CalendarWeekRule.FirstFullWeek,
                                                  DayOfWeek.Sunday);

我想返回代表今天之后第 n 周第一天的 DateTime

例如当 n = 2 时,我希望 DateTime 代表下一个星期天。

有没有办法在 C# 中做到这一点?

【问题讨论】:

    标签: c# .net datetime week-number


    【解决方案1】:

    你可以使用:

    DateTime sundayInFuture = DateTime.Today.AddDays((n - 1) * 7 + (7 - (int)DateTime.Today.DayOfWeek));
    

    这应该可行(尽管我无法访问任何东西来测试它!)。

    编辑:感谢 cmets。

    【讨论】:

    • @anishMarokey - 如果你发表这样的评论,至少解释一下为什么,或者你得到了什么错误。
    • @anishMarokey:为什么不呢?我错过了什么?
    • 我不得不将 DateTime.Today.DayOfWeek 强制转换为 int,但除此之外这有效。 - 谢谢。
    • @Andy:没有问题。我会用最终解决方案更新我的答案
    【解决方案2】:

    这应该可行:

    int n = 2;
    DateTime today = DateTime.Today;
    int daysToNextSunday = (7 - today.DayOfWeek - DayOfWeek.Sunday) ;
    DateTime nthSunday = today.AddDays((n - 1) * 7 + daysToNextSunday);
    

    【讨论】:

    • DayOfWeek.Sunday = 0,所以你可以忽略它来稍微简化一下。
    • @Jackson:是的 - 我不想做这个假设,通过明确地解析它对我来说更容易
    • 很公平 - 它还可以更轻松地转换为一周中的不同日期。
    • 不,它不会让转换变得更容易。此代码有效,因为 sunday == 0,不同的 day daysToNext 可以有效地变为负数,使其变为 daysToPrevious...
    【解决方案3】:

    你能把从现在到星期天的天数加起来,然后再加 (n-1)*7 天吗?

    【讨论】:

      【解决方案4】:

      请注意,Calendar.GetWeekOfYear 不符合 ISO 8601

      这里是使用Time Period Library for .NETWeek 类的示例:

      // ----------------------------------------------------------------------
      public DateTime GetStartOfWeek( DateTime moment, int offset )
      {
        return new Week( new Week( moment ).WeekOfYear + Math.Abs( offset ) ).FirstDayOfWeek;
      } // GetStartOfWeek
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-01-19
        • 1970-01-01
        • 2020-08-24
        • 2012-05-06
        • 2019-04-12
        • 1970-01-01
        • 2018-05-24
        相关资源
        最近更新 更多