如果每個用戶擁有他們自己的數據(即他們指定他們的季節,然後他們輸入他們自己的信息),那麼你可以存儲與季節的數據作爲其一部分,但我有一種感覺,你是用於定義不同季節的衆多用戶共享數據。
由於閏年可能會導致意想不到的問題,即試圖將2月29日設置爲非閏年會導致問題/異常,所以您必須非常小心'正常化'日期。
我已經把下面放在一起,毫無疑問地將它的C#放在一起,但概念將是相同的。我實際上測試過代碼,但是作爲psudo代碼可能會有所幫助。
public class SeasonChecker
{
public enum Season {Summer, Autumn, Winter, Spring};
private List<SeasonRange> _seasons = new List<SeasonRange>();
public void DefineSeason(Season season, DateTime starting, DateTime ending)
{
starting = starting.Date;
ending = ending.Date;
if(ending.Month < starting.Month)
{
// split into 2
DateTime tmp_ending = new DateTime(ending.Year, 12, 31);
DateTime tmp_starting = new DateTime(starting.Year, 1, 1);
SeasonRange r1 = new SeasonRange() { Season = season, Starting= tmp_starting, Ending = ending };
SeasonRange r2 = new SeasonRange() { Season = season, Starting= starting, Ending = tmp_ending };
this._seasons.Add(r1);
this._seasons.Add(r2);
}
else
{
SeasonRange r1 = new SeasonRange() { Season = season, Starting= starting, Ending = ending };
this._seasons.Add(r1);
}
}
public Season GetSeason(DateTime check)
{
foreach(SeasonRange range in _seasons)
{
if(range.InRange(check))
return range.Season;
}
throw new ArgumentOutOfRangeException("Does not fall into any season");
}
private class SeasonRange
{
public DateTime Starting;
public DateTime Ending;
public Season Season;
public bool InRange(DateTime test)
{
if(test.Month == Starting.Month)
{
if(test.Day >= Starting.Day)
{
return true;
}
}
else if(test.Month == Ending.Month)
{
if(test.Day <= Ending.Day)
{
return true;
}
}
else if(test.Month > Starting.Month && test.Month < Ending.Month)
{
return true;
}
return false;
}
}
}
請注意,上面的代碼假設季節不會在同一個月開始和結束 - 我認爲這是相當安全的!
用戶間是否會使用相同的數據?即1個數據輸入,幾個用戶可以根據他們的位置看到夏季還是冬季?或者每個用戶都有自己的數據? – Rosstified 2009-03-02 02:00:51
它將取決於位置,用戶將能夠進一步定製它。 – 2009-03-02 03:03:13