【问题标题】:Most Efficient Way To Represent Time periods表示时间段的最有效方式
【发布时间】:2012-05-30 12:22:26
【问题描述】:

我需要一段时间,例如一周并将其分解为几天,然后进一步分解为几小时、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 可以有多个 WorkingPeriod。 WorkingPeriod 有一个 StartTime 和 EndTime 以及一个分配给该 WorkingPeriod 的人员列表,其中包含 AddPerson 和 RemovePerson 的简单方法。

WorkingDay 将具有一项功能,即通过运行 WorkingPeriods 并提取分配给任何时间段的所有唯一人员来获取分配给该天的人员列表。它还将具有一个功能,可以提取所有未分配的 WorkingPeriods。

这似乎太麻烦了!尤其是当我需要一些其他的东西来占用多个工作日并检查某人被分配多天的总时间是否少于 x 小时等。

对此有什么好的结构建议吗?他们是现有的 .Net 结构,可以提供我所缺少的吗?

【问题讨论】:

    标签: c# datetime timespan


    【解决方案1】:

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

    这很适合查询,不太适合设置和验证(防止重叠等)。

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

    【讨论】:

    • 您甚至可以将其放入结构/类中并在其上定义一些运算符。
    • @fero - 是的,当然。喜欢DateTime EndTime { get { return Start + Duration; } }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 2017-12-19
    • 2011-05-26
    • 2020-12-23
    相关资源
    最近更新 更多