获取每个星期五的日期

时间:2012-04-17 18:52:30

标签: c# asp.net datetime getdate

我想知道我是否可以从2012年4月13日开始每个星期五的日期,以使用c#,asp.net作为存储过程的参数?

它也应该是最近通过的日期。谢谢!

4 个答案:

答案 0 :(得分:7)

只需设置一个DateTime,其中包含您要开始的日期,然后继续添加14天:

所以要在4月13日之后每隔一个星期五到达年底:

DateTime dt = new DateTime(2012, 04, 13);
while (dt.Year == 2012)
{
    Console.WriteLine(dt.ToString());
    dt = dt.AddDays(14);
}

评论后的更多信息:

如果您想要自2012/04/13以来的最近一个备用星期五,您可以计算从现在到2012/04/13之间的天数,将剩余的天数除以14,并从今天减去那么多天日期:

DateTime baseDate = new DateTime(2012, 04, 13);
DateTime today = DateTime.Today;

int days = (int)(today - baseDate).TotalDays;
int rem = days % 14;
DateTime mostRecentAlternateFriday = today.AddDays(-rem);

答案 1 :(得分:2)

您可以轻松制作一个生成方法,为您提供一组星期五:

public IEnumerable<DateTime> GetAlternatingFridaysStartingFrom(DateTime startDate)
{
    DateTime tempDate = new DateTime(startDate.year, startDate.Month, startDate.Day);

    if(tempDate.DayOfWeek != DayOfWeek.Friday)
    {
        // Math may be off, do some testing
        tempDate = tempDate.AddDays((7 - ((int)DayOfWeek.Friday - (int)tempDate.DayOfWeek) % 7);
    }

    while(true)
    {                
        yield return tempDate;
        tempDate = tempDate.AddDays(14);
    }
}

然后,只需使用一些LINQ来确定你想要多少:

var numberOfFridays = GetAlternatingFridaysStartingFrom(DateTime.Today).Take(10);

答案 2 :(得分:0)

为什么需要存储过程?

如果您的日期是星期五,为什么不在循环中使用AddDays(14)

如果您想从开始日期找到最近的星期五,请使用:

while(date.DayOfWeek != DayOfWeek.Friday)
{
    date.AddDays(1);
}

然后使用14天循环来获取每个星期五。

答案 3 :(得分:0)

你可以创建一个简单的方法来枚举它们:

public static IEnumerable<DateTime> GetAlternatingWeekDay(DateTime startingDate)
{
    for (int i = 1; ; i++)
    {
        yield return startingDate.AddDays(14*i);
    }
}

你可以这样打电话:

DateTime startingDate = DateTime.Parse("2012-04-13");
foreach (var date in GetAlternatingWeekDay(startingDate).Take(10))
{
    Console.WriteLine(date.ToString("R"));
}

或者,如果你需要知道给定周数的日期,你可以使用这样的代码:

DateTime date = DateTime.Parse("2012-04-13").AddDays(7 * numberOfWeeks);