如何使用DayOfWeek获取以前的日期?

时间:2011-10-26 10:24:24

标签: c# asp.net datetime

我的数据库中有一个提醒表,其中有两列用于存储ActionDay和ReminderDay。这些天都存储为整数:0(太阳) - > 6(sat)代表一周的日子。

当我加载页面时,我想显示下一个ActionDay日期以及ReminderDay日期。

我可以使用以下方法计算下一个ActionDay日期:

public static class DateTimeExtensions
{
    public static DateTime Next(this DateTime date, DayOfWeek weekday)
    {
        return (from i in Enumerable.Range(0, 7)
                where date.AddDays(i).DayOfWeek == weekday
                select date.AddDays(i)).First();

    }
}

我在使用ActionDay的上一个日期时遇到了一些麻烦。

例如,(使用今天的2011年10月26日): 如果ActionDay为'3'且ReminderDay为'2',那么我期待 '星期三,10月26日'为ActionDay和'星期二,10月25日'为ReminderDay。

如果ActionDay为0且ReminderDay为6,我期待 '太阳,10月30日'和'星期六,10月29日'

有关如何获得此提醒日期的任何建议?我也有兴趣知道是否有任何好的c#datetime扩展/片段,因为它可能更容易插入其他人测试过的东西而不是在这里写我自己的东西:)

谢谢, 富

1 个答案:

答案 0 :(得分:2)

您可以计算ActionDay和ReminderDay之间的差异,然后调用代表行动日的DateTime上的AddDay()函数来获取提醒日的DateTime:

// here a stands for the number representing the action day, and r for the reminder day
// a and r are both integers from 0 to 6
int diff;
if (a >= r)
{
    diff = a - r;
}
else
{
    diff = a + 7 - r;
}

DateTime reminderDateTime = actionDateTime.AddDays(-1 * diff);