2008-09-25 48 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

相關問題