最有效的方式代表时间段

时间:2012-05-30 12:22:26

标签: c# datetime timespan

我需要花一段时间,例如一个星期,然后分解成几天,然后进一步下降到小时,30分钟,15分钟等。

然后我希望能够将(可能是多个)人分配给那些时间跨度。

e.g。

2012年5月30日

0700:0730 - Alice,Bob

0730:0800 - 爱丽丝

....:....

1930:2000 - Alice

2012年5月31日

0700:0730 - Carol

0730:0800 - Carol

....:....

1930:2000 - Carol

每天的开始时间和结束时间可自定义。

我需要能够对工作时段进行排序并查询它们以查看是否有任何人没有分配给他们。检查没有人被分配到的一天/周。 x小时。

我知道.Net有TimeSpan和DateTime但是这些看起来很麻烦,看起来像是一些数据的简单表示而TimeSpan没有StartTime,它纯粹只是一段时间(例如30分钟,5分钟, 1小时等)。

我最初的想法是创建一个名为WorkingDay的类,一个WorkingDay可以有许多WorkingPeriods。一个WorkingPeriod有一个StartTime和EndTime以及一个分配给该WorkingPeriod的人员列表,其中包含AddPerson和RemovePerson的简单方法。

WorkingDay将通过运行WorkingPeriods并拉出所有分配给任何时段的唯一人来获取当天分配的人员列表。它还有一个函数可以在没有指定的情况下拉出所有的WorkingPeriod。

这似乎太麻烦了!特别是因为我需要其他一些需要花费大量工作日的东西,并检查多天分配给某人的总时间少于x小时等。

对此有何良好结构的建议?他们现有的.Net结构是否会提供我所缺少的内容?

1 个答案:

答案 0 :(得分:8)

时间段的最直接(和紧凑)表示是DateTime start, TimeSpan duration

这非常适合查询,不太适合设置和验证(反对重叠等)。

下一个选项是将每一天(或一周)划分为固定数量的期间,定义这些期间一次并将每个时间段编码为DateTime base, int PeriodId。更好地找到空箱和重复。