2012-04-17 72 views
-1

我想知道是否可以從2012年4月13日開始每個備選星期五的日期將其作爲使用c#,asp.net的存儲過程的參數?獲取每個備用星期五的日期

它也應該是最近通過的日期。謝謝!

+4

這將是一個非常長的sproc參數.. – 2012-04-17 18:54:33

+0

那麼你想從4/13/12還是從最近的星期五?以及你希望結束的日期是......? – 2012-04-17 18:55:00

+1

date.AddDays(14) – scottheckel 2012-04-17 18:58:16

回答

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); 
+0

你的回答非常棒!謝謝! – Ram 2012-04-17 19:17:01

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); 
+0

DateTime是一個結構體,因此它的值被複制了,不需要臨時日期;你可以使用參數; If你需要一個新的變量,只是爲了一個不同的名字,只需將startDate賦值給TempDate並且它會執行一個深層次的複製。另外,更可讀的方式來到下一個星期五'while(tempDate不是星期五)tempDate.AddDays (1)「表現不盡如人意,但它仍然是不變的,所以誰在乎。 – Servy 2012-04-17 19:06:30

+0

潛在的,但有人可以通過日期時間與分鐘和秒的信息,我不想複製該向前。這樣,您只需獲得XX/YY/ZZ 00:00.000日期時間。 – Tejs 2012-04-17 19:08:09

+0

你可以使用'Date'屬性。 'tempDate = startDate.Date'然後它使代碼中的意圖更清晰。 – Servy 2012-04-17 19:10:11

0

爲什麼你需要一個存儲過程?

如果你的日期是星期五,爲什麼不在循環中使用AddDays(14)

如果你想從一個起始日期查找最近的週五,只要使用此:

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

然後用14天的循環得到所有其他星期五。

0

您可以創建簡單的方法,將列舉出來,像這樣:如果你需要知道一個給定數量的日期

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

或者,:

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

,你可以這樣調用的周,你可以使用這樣的代碼:

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