2009-02-06 116 views
0

我如何学习下周三,星期一在星期?例如今天06.02.2009下周一09.02.2009或星期三11.02.2009有什么算法?学习日C#

我需要:

哪一天星期一在comeweek?

findDay( “星期一”)

它必须返回09.02.2009

========================== ===========================

findDay( “星期二”)

它必须回到2009年2月10日

+0

nobugz的答案是你所需要的。 DayOfWeek是一个枚举。只需复制/粘贴并使用它。 – Canavar 2009-02-06 13:26:03

回答

3
DateTime now = DateTime.Now; 
DateTime nextMonday = now.AddDays((int)now.DayOfWeek - (int)DayOfWeek.Monday); 

哼,好像我回答太快了。其实还有更多的检查要做。看看nobugz或peterchen的答案。

+0

嗯......在大多数情况下,这不会减去一天或更多天吗? – peterchen 2009-02-06 12:57:35

+0

非常感谢! – Penguen 2009-02-06 13:01:37

4
public static DateTime GetNextDayDate(DayOfWeek day) { 
    DateTime now = DateTime.Now; 
    int dayDiff = (int)(now.DayOfWeek - day); 
    if (dayDiff <= 0) dayDiff += 7; 
    return now.AddDays(dayDiff); 
} 
0

像Tyalis,但一些额外的检查是必需的:

int daysUntilMonday = ((int)DayOfWeek.Monday - (int)today.DayOfWeek; 
if (daysUntilMonday <= 0) 
    daysUntilMonday += 7; 

Monday = DateTime.Now.AddDays(daysUntilMonday); 
0

只是重复了一下:

DateTime baseDate = ...; 
DayOfWeek requiredDayOfWeek = ...; 

while(baseDate.DayOfWeek != requiredDayOfWeek) 
    baseDate = baseDate.AddDays(1); 

你也可以写一个扩展方法,如果这些可供选择:

static Next(this DateTime date, DayOfWeek requiredDayOfWeek) { ... } 

你会得到pr etty语法:today.Next(DayOfWeek.Saturday)

1

我发现了一个简单的解决方案:

星期几是一个枚举,如:星期一= 1,星期二= 2,等等

因此,要在下周一(今天),你应该使用:

DateTime.Today.AddDays(8-(int)DateTime.Today.DayOfWeek) 

其中“8”是下周的星期一(根据enum-> 1 + 7)。

更换8 10(即周三,3 + 7),你会得到下周的周三,等等...