【问题标题】:I would want to get the days of the week from a MonthCalendar我想从 MonthCalendar 中获取星期几
【发布时间】:2013-08-22 19:23:52
【问题描述】:

如何从 MonthCalendar 中获取星期几?

如果我选择一天让我们说。 2013 年 8 月 22 日,

我想要一个可以获取周一到周日(包括 2013 年 8 月 22 日)的所有代码的代码。

这意味着我会得到 8 月 18 日、19 日、20 日、21 日、22 日、23 日、24 日、25 日。

所以这是我的解决方案,但这不是我想要的。

 List<DateTime> oneweek = new List<DateTime>();

 for (int i = 7; 0 <= i; i--)
 {
      oneweek.Add(mcCalendar.SelectionEnd.Subtract(new TimeSpan(i, 0, 0, 0)));
 }

它将获得 8 月 22 日和 7 天后的日期列表。

就像我说的,我想要一周中的几天,包括 8 月 22 日,从星期一到星期日。 8 月 18 日、19 日、20 日、21 日、22 日、23 日、24 日、25 日。

【问题讨论】:

  • 我不知道包含 8 天的“周”的常见概念(尤其是您将其描述为星期一到星期六的那个,这似乎不包括星期日),但您两次给出的示例为 18, 19,20,21,22,23,24,25?

标签: c# windows date datetime


【解决方案1】:

你可以得到一周的开始using the method described in this answer

public static class DateTimeExtensions
{
    public static DateTime StartOfWeek(this DateTime dt, DayOfWeek startOfWeek)
    {
        int diff = dt.DayOfWeek - startOfWeek;
        if (diff < 0)
        {
            diff += 7;
        }

        return dt.AddDays(-1 * diff).Date;
    }
}

你会这样使用:

DateTime monday = mcCalendar.SelectionEnd.StartOfWeek(DayOfWeek.Monday);
List<int> days = new List<int>();
for (int i = 0; i < 7; i++)
{
    days.Add(monday.AddDays(i).Day);
}

【讨论】:

    【解决方案2】:

    您在循环中使用--i,然后在语句中减去

    这应该可以工作

    for (int i = 0; i <= 7; i++)
    {
       oneweek.Add(mcCalendar.SelectionEnd.Subtract(new TimeSpan(i, 0, 0, 0)));
    }
    

    【讨论】:

      【解决方案3】:

      尝试玩这个。

        int i = 7 ; int j= 8 ; 
        for (int k = 0 ; k< 7 ;  k++ ) 
        { 
      
        DateTime dateValue = new DateTime(2008, i, j); // for example
        Console.WriteLine(dateValue.ToString("dddd"));    // Displays the day
        i++ ; j++ ; 
        }
      

      【讨论】:

        【解决方案4】:

        您可以枚举一周内的所有日期。结果是IEnumerable&lt;DateTime&gt;,您可以轻松地获得所需的集合 - 列表、数组...

        public static IEnumerable<DateTime> GetWeekDays(DateTime date, DayOfWeek start) {
          date = date.Date;
        
          int diff = date.DayOfWeek - start;
        
          if (diff < 0)
            diff += 7;
        
          for (int i = 0; i < 7; ++i)
            yield return date.AddDays(i - diff);
        }
        
        public static IEnumerable<DateTime> GetWeekDays(DateTime date) {
          return GetWeekDays(date, CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek);
        }
        
        ...
        
        List<DateTime> oneWeek = GetWeekDays(DateTime.Now).ToList();
        DateTime[] anotherWeek = GetWeekDays(new DateTime(2012, 5, 7)).ToArray();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-10-22
          • 2017-11-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多