我想从MonthCalendar获得本周的日子

时间:2013-08-22 08:10:10

标签: c# windows date datetime

我如何从MonthCalendar获得本周的日期?

如果我选择一天就可以说。 2013年8月22日,

我想要一个能够从周一到周日获得所有代码的代码,包括2013年8月22日。

这意味着我会得到,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。

4 个答案:

答案 0 :(得分:0)

你在你的循环中使用--i然后在语句中减去

这可以工作

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

答案 1 :(得分:0)

您可以获得本周的开始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 :(得分:0)

试着玩这个。

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

答案 3 :(得分:0)

您可以枚举一周内的所有日期。结果为IEnumerable<DateTime>,您可以轻松地创建所需的集合 - List,Array ...

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