2014-10-07 26 views
2

任何人都可以告訴我從出現次數和事件發生模式計算出現的循環事件結束日期的最佳方法。如何使用出現次數計算eas出現的結束日期

例如: 我有一個事件,其開始日期爲2014年10月7日(星期二),並在週二每週發生。此事件將在10次事件發生後結束(說)。所以,我的方法應該返回我的結束日期爲:12/09/2014

該方法還應考慮更復雜的情況,例如假設事件每年在10月的第一個星期一發生並且總共發生10次。

回答

5

(這不是一個答案,讓你以任何方式一個完整的解決方案,但希望它是朝着正確方向邁出的一步。)

好運。我曾參與ActiveSync實施,並且經常性事件從根本上是痛苦的。你需要考慮各種各樣的角落案例 - 如果30日每個月發生一次,2月會發生什麼?如果發生在凌晨1點30分,會發生什麼情況,並且時鐘會在事件的時區前進或後退,以便特定日期的凌晨1點30分發生0或2次?

野田時間可以幫助與此,但它不提供完整的解決方案,部分因爲所有的要求會有很大的不同。

你需要了解的重要類型是LocalDateLocalDateTime提供時區中立的日期/時間,並Period代表的時間不-一定固定的週期,如「1月」。這將有助於諸如「添加一週」之類的內容,並且在LocalDate上有諸如「此日期之後的下個星期一」之類的方法。對於「每週,週一和週三」的活動而言,這會變得更加困難 - 您需要逐步完成周,在特定的一週內確定哪些日期會發生,直到您完成了所需的所有活動。

野田佳彥時間2.0具有「調節器」,這將使生活的東西稍微簡單,如「十月的第一個星期一」的概念,但你需要做的一切可以與野田時間1.3完成。 (不要等到野田佳彥時間2.0,這是我不希望被釋放至少另外6個月。)

我覺得我最大的建議件是:

  • 保持簡單。專注於首先獲得正確的結果,然後解決所需的任何優化。 (例如,不要試圖「猜測」事件的第100個實例什麼時候會發生 - 通過簡單步驟遍歷100個實例將會變得更慢,但是要找到正確答案。度量性能,但要確保你請在優化之前進行良好的測試。)
  • 介紹您自己的類型來表示,確切地說是您對事件的瞭解。使用當然匹配的野田時間類型,但不要試圖使用現有的類型,因爲它的相當於,就像你試圖表示的那樣。小小的差異最終會讓你失望。
  • 確保你知道你真正想要的結果。寫批次的測試。日期和時間工作是一個自然而然地面向數據的領域,因此投資儘可能簡單地爲所有需要考慮的角落案例編寫測試。 (你真的應該在想他們。要特別注意閏年和時區)
  • 要知道,時間算術不遵循算術的一般規則 - x + 1 month + 1 month是不一樣的x + 2 months
  • 如果/當行爲讓你驚訝,回來問這裏的具體問題。我們並不是很多人在努力研究野田時間,但問題往往很快得到回答:)
+0

刪除我的微弱的回答贊成這個:) – 2014-10-17 02:03:32