我想知道我是否可以获取从 2012 年 4 月 13 日开始的每个备用星期五的日期,以将其作为参数提供给使用 c#、asp.net 的存储过程?
它也应该是最近通过的日期。谢谢!
只需将 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);
您可以轻松地创建一个生成器方法,该方法将为您提供一组星期五:
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);
为什么需要存储过程?
如果您的日期是星期五,为什么不AddDays(14)
循环使用呢?
如果您想从开始日期找到最近的星期五,只需使用以下命令:
while(date.DayOfWeek != DayOfWeek.Friday)
{
date.AddDays(1);
}
然后使用 14 天循环获取每隔一个星期五。
您可以创建简单的方法来枚举它们,如下所示:
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);