「命名日」 2008年C#中找到相同的範圍是從1年前使用C#的Visual Studio
任何人都可以使用的算法有助於做到這一點,請
如果我有選擇的這個天數範圍星期(例如星期一到星期五),我可以使用可用的日期時間函數找到這些日期。
我想做的事情是與1年前相同日期範圍的存儲數據進行比較。
所以基本上我需要回去1年,找到離1年前的最近星期一至星期五的日期範圍。我想我也需要考慮閏年。
任何人都可以幫助一個合適的算法如何實現這一點。 當然,去年今天的日子不會是同一天。
在此先感謝
「命名日」 2008年C#中找到相同的範圍是從1年前使用C#的Visual Studio
任何人都可以使用的算法有助於做到這一點,請
如果我有選擇的這個天數範圍星期(例如星期一到星期五),我可以使用可用的日期時間函數找到這些日期。
我想做的事情是與1年前相同日期範圍的存儲數據進行比較。
所以基本上我需要回去1年,找到離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日,因爲這是距離「一年前的同一天」最近的日期。
我強烈建議,無論你走到哪裏,你有單元測試檢查閏年,開始和年末等
比方說,你選擇週三10-02-2010 - 今年五12-02-2010。 去年將是2009年10月2日星期二 - 2009年12月2日星期四。
因此,您可以執行以下操作:只需執行DateTime.AddYears(-1)即可返回一年。確保你在這裏糾正閏年。
然後,您使用.AddDays(1),直到最終在星期三至星期五的時間範圍內。 這樣,你只需要在一個點考慮閏年,這應該會產生你需要的結果。
我剛剛減去了一年,然後向後跑,直到我找到了一個星期一。 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);
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屬性。
這很有趣。
// 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中內置的單元測試功能,以確保您佔到角落的情況。
這是功課嗎?如果沒有告訴我們你已經試過了什麼 – TFD 2010-02-10 06:28:38