我只能找到获得ISO 8601周的算法(星期一开始一周)。
然而,iCal规范说
一周定义为七天,从当天开始 周定义为周开始(见WKST)。第一周的第一周 日历年是包含至少四(4)天的第一周 在那个日历年。
因此,它比ISO 8601更复杂,因为星期开始可以是一周中的任何一天。
是否有算法确定日期的周数,以及自定义的一周开始日期?
或...... iCal4j中是否有一个函数执行此操作?从日期确定一周?
谢谢!
P.S。限制:我使用的是无法扩展Java类的JVM语言,但我可以调用Java方法或实例化Java类。
答案 0 :(得分:4)
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日,周开始是星期一
(18 - 2)/ 7 + 1 = 3 回答周号。 3
示例#2: 2012年1月18日,周开始是星期四
(18 - 5)/ 7 + 1 = 2 回答周号。 2
示例#3: 2012年1月1日,星期一是星期一
2012年1月1日&lt; 2012年1月2日 回答周号。 52
答案 1 :(得分:2)
让daysInFirstWeek
为一年中第一周的天数。周从WKST
天开始。 (例如,如果1月1日是WKST
天,则返回7)
将dayOfYear
设置为输入日期年份的第n天(例如2月1日= 32)
如果dayOfYear
小于或等于daysInFirstWeek
3.1。如果daysInFirstWeek
大于或等于4,weekNo
为1,请跳至步骤5.
3.2。让daysInFirstWeekOfLastYear
为1月份上一年第一周的天数。周从WKST
天开始。
3.3。如果daysInFirstWeekOfLastYear
为4或去年为闰年而daysInFirstWeekOfLastYear
为5,则weekNo
为53,否则weekNo
为52,请跳至步骤5.
将weekNo
设为ceiling((dayOfYear - daysInFirstWeek) / 7)
4.1。如果daysInFirstWeek
大于或等于4,则将weekNo
增加1
4.2。如果daysInFirstWeek
等于53且WKST
年的+ 1年1月的第一周(从inputDate
开始)的天数大于或等于4,则设置weekNo
到1
返回weekNo