2

「朝のミーティング」など、毎日の活動を保存するテーブルがあります。これらの活動は、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. アクティビティは、特定の日に 1 回だけ実行できます。つまり、火曜日にモーニング ミーティングを 2 回行うことはできません。
  2. 連続していない 1 週間に 2 日以上発生するアクティビティは、カンマ区切りのリストに表示できます (例: Mon, Wed, Fri 1:00-1:30 PM.
  3. マークされたアクティビティはBiweekly、「隔日...」と表示され、週に 1 日しか発生しませんEvery other Thurs 3:00-3:45 PM
  4. このエンティティのテーブルと関連するクラスは既に作成していますが、より良い解決策があれば、このデータを別の形式で格納することに完全にオープンです。

整数シーケンスを各曜日に割り当てて時間を比較することでこれを理解できると確信していますが、おそらくTimeSpan構造を利用して、これにはより良いアルゴリズムがあるようです。誰にもアイデアはありますか?

4

2 に答える 2

2

期間ライブラリは、これであなたを助けるかもしれません

于 2013-04-11T14:22:07.847 に答える