各ユーザーが自分のデータを所有している場合(つまり、季節を指定してから自分の情報を入力した場合)、シーズンのデータをその一部として保存できますが、シーズンを異なる方法で定義する多数のユーザー間で共有されるデータ用です。
うるう年が予期せぬ問題を引き起こす可能性があるため、2月29日にうるう年を設定しようとすると問題/例外が発生するため、日付を '正規化'するのに非常に注意する必要があります。
私はunforutnatlyその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!
ユーザー間で同じデータを使用できますか? 1つのデータ入力と複数のユーザーが、その場所に応じて夏か冬のどちらかを見ることができますか?または、各ユーザーは独自のデータを持っていますか? – Rosstified
それは場所に依存し、ユーザーはそれをさらにカスタマイズすることができます。 –