我想从MonthCalendar中获取一周中的日期

本文关键字:一周 日期 获取 MonthCalendar | 更新日期: 2023-09-27 18:28:30

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

我想从MonthCalendar中获取一周中的日期

您可以使用以下答案中描述的方法开始本周

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

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

这应该工作

for (int i = 0; i <= 7; i++)
{
   oneweek.Add(mcCalendar.SelectionEnd.Subtract(new TimeSpan(i, 0, 0, 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++ ; 
  }

您只需枚举一周内的所有日期。因此,有了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();