从具有自定义一周开始的日期计算一周的算法? (对于 iCal)

标签 algorithm calendar icalendar week-number ical4j

我只能找到获得 ISO 8601 周的算法(周从星期一开始)。

然而,iCal规范说

A week is defined as a seven day period, starting on the day of the week defined to be the week start (see WKST). Week number one of the calendar year is the first week that contains at least four (4) days in that calendar year.

因此,它比 ISO 8601 更复杂,因为一周的开始可以是一周中的任何一天。

是否有一种算法可以确定日期的周数,并具有自定义的一周开始日?

或者... iCal4j 中有函数吗?这样做吗?从日期确定星期几?

谢谢!

附注限制:我使用的 JVM 语言无法扩展 Java 类,但我可以调用 Java 方法或实例化 Java 类。

最佳答案

if (input_date < firstDateOfTheYear(WKST, year))
{
    return ((isLeapYear(year-1))?53:52);
}
else
{
    return ((dayOfYear(input_date) - firstDateOfTheYear(WKST, year).day)/7 + 1);
}

firstDateOfTheYear 返回给定星期开始 (WKST) 和年份的第一个日历日期,例如如果 WKST = 星期四,年份 = 2012,则返回 1 月 5 日。

dayOfYear 返回一年中的连续数字日,例如2 月 1 日 = 32

示例 #1:2012 年 1 月 18 日,一周的开始是星期一

  • dayOfYear(2012 年 1 月 18 日)= 18
  • firstDateOfTheYear(2012 年星期一)= 2012 年 1 月 2 日

(18 - 2)/7 + 1 = 3 回答周数3

示例 #2:2012 年 1 月 18 日,星期四开始一周

  • dayOfYear(2012 年 1 月 18 日)= 18
  • firstDateOfTheYear(2012 年星期四)= 2012 年 1 月 5 日

(18 - 5)/7 + 1 = 2 回答周数2

示例 #3:2012 年 1 月 1 日,一周的开始是星期一

  • firstDateOfTheYear(2012 年星期一)= 2012 年 1 月 2 日
  • IsLeapYear(2012-1) = false

2012 年 1 月 1 日 < 2012 年 1 月 2 日 回答周数52

关于从具有自定义一周开始的日期计算一周的算法? (对于 iCal),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8999892/

相关文章:

保留访问有限许可的算法

mysql - 如何计算夜类和周日的额外工资

iphone - 如何自定义 EKEventEditViewController

java - 将 Date 对象转换为日历对象

php - Vcalendar 在 Outlook 桌面应用程序中显示一分钟时差

email - 将iCalendar事件附加到Grails中的邮件

algorithm - 最短路径算法的变体

python - 菜鸟算法设计

c# - 文件是空的,我不明白为什么。 Asp.net mvc 文件结果

java - 使用两个列表在每条边上的权重仅为 1 和 2 的图形上的 Prim 算法