我需要有条件地减去和添加日期,以及有条件地减去和添加分钟。让我描述一下我的意思:
每周有 5 个工作日(周一至周五)。这些天有工作时间(10 - 18)。
我需要执行一些操作:
1. (DT_1-DT_1).TotalMinutes
2. DT.AddMinutes(minutes)
实现这一点的最简单方法是什么?我尝试使用扩展方法,但结果非常麻烦和令人困惑......
例如,我需要以下内容:
DT_1 = 2019.01.11 18:00:00.000(星期五)
DT_2 = 2019.01.12 10:00:00.000(星期六)
分钟 = 60(1 小时)
(DT_1-DT_).TotalMinutes_custom = 0
(DT_2-DT_1).TotalMinutes_custom =0
DT_1.AddMinutes_custom(分钟)= 2019.01.14 11:00:00.000
DT_2.AddMinutes_custom(-minutes) = 2019.01.11 17:00:00.000
也许有人知道如何最简单、最漂亮地实现这一点?或者也许已经有一个内置的解决方案?
你每周工作 40 小时。
那么……你需要在这周内安排好你的时间。
那你需要
每小时分开。如果周一从 9 到 18 日,那么周一 9、周一 10、周一 11 .... 周一 17 周二 8 .... 周五 9 ... 周五 15 可能是这样。那么你的收益将是这样的。
但是您的 dt - 必须在 40 小时系统内,如果不是 - 那么您需要指定任务。
是的。以小时为单位的差异......相同,我们将其转换为 40 进制,然后减去。我们找到两个索引 i 和 j(如上)。然后几个小时内的答案将是......
(TotalDays / 7)*40 + j - i然后......然后你可以以某种方式使这一天正常化。您可以找到一天中的最小和最大小时数......并且......减去“额外的余数”或将其带到第二天......我认为拥有这样一个数组并不难。
是的......这种方法不考虑假期和转移,周六工作等。您需要创建另一个表 - WorkDayNumber-Day-Month-Year 数组并计算通过它的天数,而不是通过通过日历。例如,制作
Dictionary<DateTime,int>天数并在数据库中保留“工作日日历”。只有计算出的数据不应该改变 - 因为间隔将不匹配。那么天之间的距离将是“大致”days[d2.date]-days[d1.date],并且在上面提出的方法中,您将不得不使用这样的数组而不是 AddDays,并通过索引计算以天为单位的距离。