gpt4 book ai didi

datetime - 如何使用出现次数来计算 eas 中重复事件的结束日期

转载 作者:行者123 更新时间:2023-12-03 06:40:01 25 4
gpt4 key购买 nike

谁能告诉我根据事件发生的次数和模式计算重复事件的结束日期的最佳方法。

例如:我有一个事件,开始日期为 10/07/2014(星期二),每周星期二发生。该事件将在发生 10 次后结束(假设)。因此,我的方法应该返回结束日期为:12/09/2014

该方法还应该考虑更复杂的情况,例如假设该事件每年发生在 10 月的第一个星期一,并且总共发生了 10 次。

最佳答案

(无论如何,这都不是一个可以为您提供完整解决方案的答案,但希望这是朝着正确方向迈出的一步。)

祝你好运。我曾致力于 ActiveSync 实现,而重复发生的事件从根本上来说是令人痛苦的。您需要考虑各种极端情况 - 如果每个月 30 号都会发生某事,那么 2 月份会发生什么?如果它发生在凌晨 1.30,并且时钟在事件所在时区向前或向后移动,导致某一天凌晨 1.30 出现 0 次或 2 次,会发生什么情况?

Noda Time 可以帮助解决这个问题,但它并没有提供完整的解决方案,部分原因是所有的要求都会有很大差异。

您需要了解的重要类型是 LocalDateLocalDateTime提供时区中立的日期/时间,以及 Period它代表不一定固定的时间段,例如“1个月”。这将有助于“添加一周”之类的事情 - 并且 LocalDate 上有方法。对于诸如“该日期之后的下周一”之类的事情。对于“每周、周一和周三”的事件来说,这会变得更加困难 - 您需要逐步浏览几周,计算出特定一周内发生的日子,直到您完成所需的所有事件。

Noda Time 2.0 具有“调节器”的概念,这将使“十月的第一个星期一”之类的事情变得更简单,但您需要做的一切都可以通过 Noda Time 1.3 完成。 (不要等待 Noda Time 2.0,我预计至少还要 6 个月后才会发布。)

我认为我最强烈的建议是:

  • 保持简单。首先专注于获得正确的结果,然后制定您需要的任何优化。 (例如,不要尝试“猜测”事件的第 100 个实例何时发生 - 使用简单步骤逐步执行 100 个实例会较慢,但可以让您得到正确的答案。一定要衡量性能,但确保您在优化之前进行良好的测试。)
  • 引入您自己的类型来准确地表示您对事件的了解。当然,请使用它们匹配的 Noda Time 类型,但不要仅仅因为现有类型与您想要表示的类型非常而试图使用它们。微小的差异最终会影响到你。
  • 确保您知道您真正想要的结果是什么。编写大量测试。日期和时间工作本质上是一个面向数据的领域,因此要尽可能轻松地为您应该考虑的所有极端情况编写测试。 (您确实应该考虑它们。特别注意闰年和时区。)
  • 请注意,时间算术不遵循正常的算术规则 - x + 1 month + 1 monthx + 2 months 不同
  • 如果/当行为让您感到惊讶时,一定回来在这里提出具体问题。我们中参与 Noda Time 的人并不多,但问题往往会很快得到解答:)

关于datetime - 如何使用出现次数来计算 eas 中重复事件的结束日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26244210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com