2010-02-10 15 views
3

「命名日」 2008年C#中找到相同的範圍是從1年前使用C#的Visual Studio

任何人都可以使用的算法有助於做到這一點,請

如果我有選擇的這個天數範圍星期(例如星期一到星期五),我可以使用可用的日期時間函數找到這些日期。

我想做的事情是與1年前相同日期範圍的存儲數據進行比較。

所以基本上我需要回去1年,找到離1年前的最近星期一至星期五的日期範圍。我想我也需要考慮閏年。

任何人都可以幫助一個合適的算法如何實現這一點。 當然,去年今天的日子不會是同一天。

在此先感謝

+0

這是功課嗎?如果沒有告訴我們你已經試過了什麼 – TFD 2010-02-10 06:28:38

回答

1

下面是一些代碼,你想要什麼這可能做 - 但測試案例表明,有極端案例來考慮:

using System; 

public class Test 
{ 
    static void Main() 
    { 
     Console.WriteLine(SameDayLastYear(DateTime.Today)); 
     Console.WriteLine(SameDayLastYear(new DateTime(2010, 12, 31))); 
    } 

    static DateTime SameDayLastYear(DateTime original) 
    { 
     DateTime sameDate = original.AddYears(-1); 
     int daysDiff = original.DayOfWeek - sameDate.DayOfWeek; 
     return sameDate.AddDays(daysDiff); 
    } 
} 

你想要第二個電話的結果是什麼?此代碼返回2010年1月1日,因爲這是距離「一年前的同一天」最近的日期。

我強烈建議,無論你走到哪裏,你有單元測試檢查閏年,開始和年末等

0

比方說,你選擇週三10-02-2010 - 今年五12-02-2010。 去年將是2009年10月2日星期二 - 2009年12月2日星期四。

因此,您可以執行以下操作:只需執行DateTime.AddYears(-1)即可返回一年。確保你在這裏糾正閏年。

然後,您使用.AddDays(1),直到最終在星期三至星期五的時間範圍內。 這樣,你只需要在一個點考慮閏年,這應該會產生你需要的結果。

0

我剛剛減去了一年,然後向後跑,直到我找到了一個星期一。 LastYear最終會在此日期之前是第一個星期一去年

DateTime LastYear = DateTime.Now.AddYears(-1) 
DayOfWeek Check = LastYear.DayOfWeek; 
while (Check != DayOfWeek.Monday) 
{ 
    LastYear = LastYear.addDays(-1); 
    Check = LastYear.DayOfWeek; 
} 
Console.WriteLine("{0}",LastYear); 
0
DateTime now = DateTime.Now; 
    DateTime lastyear = now.AddYears(-1); 

    string dayOfWeek = lastyear.DayOfWeek.ToString(); 

    if (dayOfWeek.Equals("Saturday")) { dayOfWeek = "Friday"; } 
    else if (dayOfWeek.Equals("Sunday")) { dayOfWeek = "Monday"; } 

    Console.WriteLine(dayOfWeek); 
    Console.ReadKey(); 

獲取去年DateTime對象,然後使用DAYOFWEEK屬性。

0

這很有趣。

 // today's info 
     DateTime today = DateTime.Now; 
     DayOfWeek today_name = today.DayOfWeek; 
     // this day one year ago 
     DateTime year_ago = today - new TimeSpan(((today.Year - 1) % 4) ? 365 : 366, 0, 0, 0); 
     // find the closest day to today's info's name 
     DayOfWeek today_name_a_year_ago = year_ago.DayOfWeek; 
     DateTime current_range_a_year_ago = year_ago - new TimeSpan(year_ago.DayOfWeek - today_name, 0, 0, 0); 
     Console.WriteLine("Today is {0}, {1}", today_name, today); 
     Console.WriteLine("One year from today was {0}, {1}", today_name_a_year_ago, year_ago); 
     Console.WriteLine("New date range is {0}", current_range_a_year_ago); 

我強烈建議使用VS2008中內置的單元測試功能,以確保您佔到角落的情況。

+0

這是假設去年不是閏年。 – Russell 2010-02-10 06:34:35

+0

是真的!我實際上不確定爲什麼我說TimeSpan會佔據閏年,因爲我已經減去了幾天而不是幾年。我會嘗試正確編輯代碼。 – Dave 2010-02-10 06:41:49

相關問題