表示时间段的最有效方法

本文关键字:有效 方法 时间段 表示 | 更新日期: 2023-09-27 18:35:40

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

然后我希望能够将(可能有多个)人员分配到这些时间跨度。

例如

2012年5月30日

0700 : 0730 - 爱丽丝, 鲍勃

0730 : 0800 - 爱丽丝

.... : ....

1930 : 2000 - 爱丽丝

2012年5月31日

0700 : 0730 - 颂歌

0730 : 0800 - 颂歌

.... : ....

1930 : 2000 - 颂歌

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

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

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

我最初的想法是创建一个名为WorkingDay的类,一个WorkingDay可以有许多WorkingPeriods。 工作周期具有开始时间和结束时间以及分配给该工作周期的人员列表,其中包含简单的 AddPerson 和 RemovePerson 方法。

WorkingDay将具有一个功能,通过运行工作周期并提取为任何时间段分配的所有唯一人员来获取当天分配的人员列表。它还将具有一个功能,可以在没有人分配的情况下提取所有工作周期。

不过,这似乎太麻烦了!特别是因为我将需要其他东西来接收多个工作日并检查某人在多天内分配的总时间是否小于 x 小时等。

对此的良好结构有什么建议吗?他们现有的.Net结构将提供我缺少的这个吗?

表示时间段的最有效方法

隙最直接(也是紧凑)的表示形式是DateTime start, TimeSpan duration

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

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