2

我正在创建一个 UI,允许用户选择一个日期范围,并勾选或取消勾选该日期范围内适用的星期几。

日期范围控件是DateTimePickers,星期几是CheckBoxes

这是 UI 的模型:

From Date: (dtpDateFrom)
To Date: (dtpDateTo)

[y] Monday, [n] Tuesday, [y] Wednesday, (etc)

显示总天数的最佳方式是什么,不仅基于日期范围,还基于一周中勾选(或选定)的天数?

循环浏览日期范围是我唯一的选择吗?

4

2 回答 2

5

这是我将如何处理它:

  • 查找第一个和最后一个日期的星期几(dow)
  • 将第一天向前移动到与最后一天相同的道琼斯指数。要包括的商店移动天数
  • 计算第一个和最后一个之间的周数
  • 计算一周中包含的天数 * 周数 + 包含的移动天数

作为伪代码:

 moved = start + end_dow - start_dow
 extras = count included days between start and moved
 weeks = ( end - moved ) / 7
 days = days_of_week_included * weeks + extras

这将花费恒定的时间,无论开始日期和结束日期相距多远。

实现此算法的细节取决于您使用的语言和库。在可能的情况下,我使用 C++ 和 boost::date_time 来处理这类事情。

于 2008-09-25T10:44:00.700 回答
2

循环不是您唯一的选择 - 您可以执行减法来计算总天数,并为包含这些日子之一的每周“跳过”日期范围内的每个“跳过”日期减去一个。当您确定一天是否落在范围开始或结束的部分周之一并添加#weeks * skipped days in a week时,您的代码将比仅计算时更复杂,但如果您期望有巨大的日期范围,它可能会表现得更好。

如果我是你,我会编写简单的循环选项,如果结果分析表明它是一个瓶颈,我会重写它。

于 2008-09-25T10:37:20.763 回答