2011-02-14 160 views
6

我对此问题感到不解。 当我选择特定日期时,如何获取月份日历星期六值。使用月份日历获取选定星期的星期六日期值

例如:我在月份日历上选择了2月14日。选择后会有一个提示,其中包含星期六“2011年2月19日”或我选择的2月24日,提示将显示“2011年2月26日”。

enter image description here

回答

11
// This function will return the next saturday for a datetime 
DateTime NextSaturday(DateTime now) 
{ 
    while (now.DayOfWeek != DayOfWeek.Saturday) 
     now = now.AddDays(1); 
    return now; 
} 

UPDATE

经过近2年来,我想改变这个答案。

这几天我永远不会为class创建“效用函数”。我现在总是“扩大”班级。签名现在应该是DateTime.Next(DayOfWeek)。有关扩展的更多详细信息,请参阅http://msdn.microsoft.com/en-us/library/vstudio/bb383977.aspx

此外,逻辑是错误的。如果now是星期六,那么它总是会返回当前日期。我认为大部分来电者预计它会返回now + 7天。因此,第一个变化是:

DateTime NextSaturday(DateTime now) 
{ 
    do { 
     now = now.AddDays(1); 
    } while (now.DayOfWeek != DayOfWeek.Saturday) 

    return now; 
} 

然后改变函数与每周的任何一天的工作:

DateTime Next(DateTime now, DayOfWeek nextDay) 
{ 
    do { 
     now = now.AddDays(1); 
    } while (now.DayOfWeek != nextDay) 

    return now; 
} 

现在,“扩展” DateTime类支持下(星期几)

namespace DateTime.Extensions 
{ 
    public static class DateTimeExtensions 
    { 
    public static DateTime Next(this DateTime now, DayOfWeek nextDay) 
    { 
     do { 
      now = now.AddDays(1); 
     } while (now.DayOfWeek != nextDay) 

     return now; 
     } 
    } 
} 
3
DateTime add = DateTime.Now; //From popup box 
int add = (((int)selected.DayOfWeek) + 1; 
if(add != 7) { 
    selected = selected.AddDays(add); 
} 
+0

@scrum比我的(@richard)答案更有效率(+1)。但我认为我的可维护性更强。 – 2011-02-14 09:23:51

相关问题