-1

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

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

4

4 回答 4

8

只需将 a 设置为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);
于 2012-04-17T18:59:57.943 回答
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);
于 2012-04-17T19:01:24.573 回答
0

为什么需要存储过程?

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

如果您想从开始日期找到最近的星期五,只需使用以下命令:

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

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

于 2012-04-17T19:01:40.363 回答
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);
于 2012-04-17T19:13:27.307 回答