「朝のミーティング」など、毎日の活動を保存するテーブルがあります。これらの活動は、1 日のうちのさまざまな時間に、毎週 1 日または複数日行われます。活動時間の「適切な」説明を作成するためのアルゴリズムが必要です。現在、私はこのデータ構造を扱っています:
public class DailyActivityTime
{
public int WeeklyActivityTimeId { get; set; }
public bool Sunday { get; set; }
public string SundayStartTime { get; set; }
public string SundayEndTime { get; set; }
public bool Monday { get; set; }
public string MondayStartTime { get; set; }
public string MondayEndTime { get; set; }
public bool Tuesday { get; set; }
public string TuesdayStartTime { get; set; }
public string TuesdayEndTime { get; set; }
public bool Wednesday { get; set; }
public string WednesdayStartTime { get; set; }
public string WednesdayEndTime { get; set; }
public bool Thursday { get; set; }
public string ThursdayStartTime { get; set; }
public string ThursdayEndTime { get; set; }
public bool Friday { get; set; }
public string FridayStartTime { get; set; }
public string FridayEndTime { get; set; }
public bool Saturday { get; set; }
public string SaturdayStartTime { get; set; }
public string SaturdayEndTime { get; set; }
public bool Biweekly { get; set; }
public string DisplayText { get; set; }
}
Start
とのEnd
時間はデータ型として SQL Server (2008 R2) に永続TIME
化され (したがって、C# コードでは として取り込まれますTimeSpan
)、bool
プロパティはもちろんBIT
. DailyActivityTime
コンストラクターまたはDisplayText
プロパティ ゲッター のいずれかで、クラス自体に C# で記述への変換コードを記述したいと考えています。
たとえば、モーニング ミーティングのアクティビティが次のように発生するとします。
Monday: 10:00-10:30AM
Tuesday: 10:00-10:30AM
Wednesday: 10:00-10:30AM
Thursday: 10:00-10:30AM
Friday: 10:00-10:30AM
Saturday: 5:00-6:00PM
Sunday: 5:00-6:00PM
この例を次のように表示する必要があります。
Mon-Fri 10:00-10:30 AM, Sat & Sun 5:00-6:00 PM
いくつかの基本的な事実:
- アクティビティは、特定の日に 1 回だけ実行できます。つまり、火曜日にモーニング ミーティングを 2 回行うことはできません。
- 連続していない 1 週間に 2 日以上発生するアクティビティは、カンマ区切りのリストに表示できます (例:
Mon, Wed, Fri 1:00-1:30 PM
. - マークされたアクティビティは
Biweekly
、「隔日...」と表示され、週に 1 日しか発生しませんEvery other Thurs 3:00-3:45 PM
。 - このエンティティのテーブルと関連するクラスは既に作成していますが、より良い解決策があれば、このデータを別の形式で格納することに完全にオープンです。
整数シーケンスを各曜日に割り当てて時間を比較することでこれを理解できると確信していますが、おそらくTimeSpan
構造を利用して、これにはより良いアルゴリズムがあるようです。誰にもアイデアはありますか?