2008-09-25 28 views
2

我正在创建一个界面,允许用户选择一个日期范围,并勾选或取消勾选在日期范围内适用的一周中的某几天。给定日期范围(开始日期和结束日期),如何计算日期,排除.Net中指定的每周日期?

的日期范围控制是DateTimePickers,和一周的日子CheckBoxes

这里的UI的实体模型:

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

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

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

在我的唯一选项中循环显示日期范围吗?

回答

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++ plus boost :: date_time来处理这类事情。

2

循环播放并不是您唯一的选择 - 您可以执行subtraction来计算总天数,并为每个包含其中一天的每个“跳过”日期减去一个。当你计算出某一天是否在范围开始或结束时的某个部分周期中出现并添加#weeks * skipped days in a week时,你的代码将比刚刚计数时更复杂,但如果你期望有日期范围很大,它可能表现更好。

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

+0

我想我会按照你的建议,先做简单的循环选项,然后我可能会刺穿ravenspoint的算法:o) – Andrew 2008-09-25 10:51:49

相关问题