【问题标题】:Get the Monday and Sunday for a certain DateTime in C#在 C# 中获取某个 DateTime 的星期一和星期日
【发布时间】:2010-11-09 22:22:12
【问题描述】:

我有一个例如日期“2010-11-09, Thuesday

现在我想获取上述日期所在的星期一和星期日的日期时间。

你会怎么做?

【问题讨论】:

  • @Lisa;你的意思是你想要星期一和星期日的日期在那个星期二的那一周?
  • @Beemer:按照惯例,每周从星期日开始,这是行不通的。
  • @Hank;是的。 OP 可能想要检索从星期二开始的星期天。只要我们不知道他们到底想要什么,任何逻辑都是可能的。通过海报“光”检查下面的答案。
  • @Henk 我的意思是在星期一和星期日之间。
  • @Lisa:我是这么认为的,但日期是依赖于文化的定义和惯例的代名词。清楚是值得的。

标签: c# date


【解决方案1】:

这可能就是你所追求的:

 DateTime date = DateTime.Today;

 // lastMonday is always the Monday before nextSunday.
 // When date is a Sunday, lastMonday will be tomorrow.     
 int offset = date.DayOfWeek - DayOfWeek.Monday;     
 DateTime lastMonday = date.AddDays(-offset);
 DateTime nextSunday = lastMonday.AddDays(6);

编辑:由于lastMonday 并不总是顾名思义(请参阅 cmets),因此以下单行可能更重要:

 DateTime nextSunday = date.AddDays(7 - (int) date.DayOfWeek);

【讨论】:

  • 不错的解决方案,比我的干净得多。
  • 这有两个错误,Monday.AddDays.. 的拼写错误应该是小写的 'm' 表示星期一。此外,要从星期一得到星期天,您将添加 6 天而不是 7。添加 7 天将得到下一个星期一。
  • 这有另一个错误。如果今天是星期天,它将在下星期一(偏移量 = -1)而不是上星期一返回。转换为整数 Sunday 将返回 0,Monday 将返回 1,因此 Sunday - Monday = -1。添加这一行,将修复它: offset = (offset
  • @gijswijs - 你是对的,但请注意 lastMonday 是作为中间的,我的代码确实为星期天生成了正确的 nextSunday (- -1 + 6 = +7)。所以事后看来,lastMonday 的名字很糟糕。
【解决方案2】:

这样的事情,当然你会想在 DateTime.MaxValue 之前的某个时间点从循环中中断,但是应该这样做:

  DateTime dt = DateTime.Parse("2010-11-09, Thuesday");


        while (dt < DateTime.MaxValue) 
        {

            if(dt.DayOfWeek == DayOfWeek.Sunday || dt.DayOfWeek == DayOfWeek.Monday)
                Console.WriteLine(dt.ToString());
            dt.AddDays(1);
        }

【讨论】:

    【解决方案3】:

    日期时间星期一 = DateTime.Now.AddDays((DateTime.Now.DayOfWeek - 1) * -1).日期;

    日期时间星期日 = DateTime.Now.AddDays(7 -DateTime.Now.DayOfWeek).Date;

    【讨论】:

    • 我不认为这在周日有效。你会不会得到明天和下周日这不会绑定今天(周日)? (0-1)*-1 = 1, 7-0 = 7。
    【解决方案4】:
    /// <summary>
    /// Returns the day that is the specific day of week of the input day.
    /// </summary>
    /// <param name="input">The input day.</param>
    /// <param name="dayOfWeek">0 is Monday, 6 is Sunday.</param>
    /// <returns></returns>
    public static DateTime GetDayOfWeekOfSpecific(DateTime input, int dayOfWeek)
    {
        if(input.DayOfWeek == DayOfWeek.Sunday)
        {
            dayOfWeek -= 7;
        }
        // lastMonday is always the Monday before nextSunday.
        // When today is a Sunday, lastMonday will be tomorrow.     
        int offset = input.DayOfWeek - DayOfWeek.Monday;
        DateTime lastMonday = input.AddDays(-offset);
        DateTime nextDayOfWeek = lastMonday.AddDays(dayOfWeek);
        return nextDayOfWeek;
    }
    

    【讨论】:

      【解决方案5】:

      如果你使用条件方法很容易

      if (v_datetime.DayOfWeek== DayOfWeek.Sunday)
      {
      return true;
      }
      
      if (v_datetime.DayOfWeek== DayOfWeek.Monday)
      {
      
      }
      

      【讨论】:

      • 请更新您的答案以提供对原始问题的完整答案,而不仅仅是回复某人的评论。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-12
      相关资源
      最近更新 更多