我想从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日。
您可以使用以下答案中描述的方法开始本周
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();