0

我如何从 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 日。

4

4 回答 4

0

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

这应该工作

for (int i = 0; i <= 7; i++)
{
   oneweek.Add(mcCalendar.SelectionEnd.Subtract(new TimeSpan(i, 0, 0, 0)));
}
于 2013-08-22T08:14:52.707 回答
0

您可以使用此答案中描述的方法获得一周的开始

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);
}
于 2013-08-22T08:15:21.613 回答
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++ ; 
  }
于 2013-08-22T08:26:25.427 回答
0

您可以枚举一周内的所有日期。IEnumerable<DateTime>因此,您可以轻松地获得所需的集合 - 列表、数组...

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();
于 2013-08-22T08:28:44.860 回答