java - 重复事件逻辑

标签 java groovy calendar

我正在开发一个 Groovy/Java 日历类型的应用程序,它允许用户输入带有开始日期和可选重复周期的事件。如果是重复发生的事件,它可能会重复发生:

  • 每月与开始日期相对应的月份
  • 每周在与开始日期相对应的一周中的某一天
  • 每 2 周在对应于开始日期的那一周的某一天
  • 等等

我最初计划使用 Google 日历 API 来执行所有重复逻辑,但事实证明它是一个巨大的 PITA,如果有人关心,我将进一步讨论原因。

所以现在,我决定推出自己的解决方案。给定一个日期,我想弄清楚这个日期是否发生了重复发生的事件。我的逻辑(伪代码)如下:

public boolean occursOnDate(def date, def event) {

  def firstDate = event.startDate

  if (firstDate > date) {
    return false;

  } else if (event.isWeekly()) {
    return event.dayOfWeek() == date.dayOfWeek()

  } else if (event.isMonthly()) {
    return event.dayOfMonth() == date.dayOfMonth()

  } else {
    // At this point we know the event occurs every X weeks where X > 1
    // Increment firstDate by adding X weeks to it as many times as possible, without
    // going past date
    return firstDate == date
  }  
}

这个逻辑看似合理,但当您考虑所有奇怪的边缘情况时(例如,如何处理在 2 月首次发生的月度重复事件是 1 月 31 日),实际上需要付出很多努力才能实现。

是否有图书馆可以帮我实现这个?一些细节将不胜感激(例如,“Use Joda Time”将不会获得学分)。

谢谢, 唐

最佳答案

您想要的那种重复规则在 RFC-2445(基本上是 iCal 规范)中有相当详细的规定。获得这个正确的细节可能非常复杂。我建议使用 google-rfc-2445这个库,或该规范的另一个实现,如 iCal4J .

关于java - 重复事件逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3977508/

相关文章:

java - Hadoop wordcount伪分布式模式错误退出代码:127

java - 迭代访问所有二叉树节点?

java - 自定义类队列数据结构的并发帮助

regex - 替换 groovy 中的捕获组

java - 获取该月的第几天

java - 通过Java提取HTML中两个链接之间的文本

java - GraphQL 分页 : cursor vs offset

spring - Grails 2.1 : Setting sessionFactory and dataSource from custom Spring configuration

perl - 在Perl中,如何确保字符串对应于有效日期?

python - 使用 Python 制作可打印的日历