最有效的方式代表时间段

use*_*683 4 c# datetime timespan

我需要花一段时间,例如一周,然后将其分解为几天,然后再进一步分为几小时,30分钟,15分钟等.

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

例如

2012年5月30日

0700:0730 - 爱丽丝,鲍勃

07:30:0800 - 爱丽丝

....:....

1930:2000年 - 爱丽丝

2012年5月31日

0700:0730 - 卡罗尔

0730:0800 - 卡罗尔

....:....

1930:2000年 - 卡罗尔

每天的开始时间和结束时间是可定制的.

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

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

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

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

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

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

Hen*_*man 9

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

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

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