我想知道我是否可以从2012年4月13日开始每个星期五的日期,以使用c#,asp.net作为存储过程的参数?
它也应该是最近通过的日期。谢谢!
答案 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);