给定日期范围(开始日期和结束日期),我如何计算天数,不包括.Net中指定的星期几?

时间:2008-09-25 10:29:12

标签: .net date

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

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

这是UI的模型:

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

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

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

循环播放日期范围我唯一的选择吗?

2 个答案:

答案 0 :(得分:5)

以下是我如何处理它:

  • 查找第一天和最后一天的星期几(道琼地日)
  • 将第一天向前移动到与上次相同的道路。存储的移动天数
  • 计算第一个和最后一个之间的周数
  • 计算一周中包含的天数*周数+包含的天数

伪代码:

 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来做这类事情。

答案 1 :(得分:2)

循环通过不是您唯一的选择 - 您可以执行subtraction计算总天数,并为每个“跳过”日期减去一个,每个星期之间的范围包含其中一个那些天。当你弄清楚某一天是否在该范围的开始或结束时的某个部分周落定并添加#weeks * skipped days in a week时,您的代码将比仅计算时更复杂,但如果您'期望有巨大的日期范围,它可能表现更好。

如果我是你,我会编写简单的循环选项并重写它,如果事实证明分析显示它是一个瓶颈。